mysql - 如何根据 RANK 找到团队的最小值和最大值
问题描述
问题:列出第一名和最后一名球队以及他们每年的击球次数 SQL 查询是什么,我如何在同一列中按年份对排名和分组结果进行 min 和 max?
下面是我正在尝试编写 SQL 的 Teams 表的列
这里的列解释了 Teams Table Columns
yearID Year
lgID League
teamID Team
franchID Franchise (links to TeamsFranchise table)
divID Team's division
Rank Position in final standings
AB At bats
期望的输出
我试图在同一年的排名中达到最小值和最大值,但无法弄清楚如何在同一列的排名中获得最小值最大值
Team ID, Year, Rank, At Bats
PH1, 1871, 1, 1281
RC1, 1871, 9, 1036
LAA, 2014, 1, 5652
样本数据
yearID lgId teamID franchID divID Rank Ab(at-bats)
'1902', 'AL', 'BOS', 'BOS', '', '3', '4875'
'1914', 'NL', 'BRO', 'LAD', '', '5', '1386'
'1925', 'AL', 'CLE', 'CLE', '', '6', '1631'
'1937', 'NL', 'NY1', 'SFG', '', '1', '1484'
MySql 脚本给我错误
select teamID,yearID,Rank,AB,
RANK() OVER (PARTITION BY yearID order by Rank DESC) other_rank
from Teams;
错误
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '(PARTITION BY yearID order by Rank DESC) other_
rank from Teams' at line 1
解决方案
这样的事情可能会起作用:
with max_rank as (
SELECT yearID, max(Rank) as MaxRank
from Teams
Group by yearID
)
SELECT T.*
FROM Teams T
LEFT OUT JOIN max_rank M ON T.yearID = M.yearid AND T.rank = m.MaxRank
WHERE T = 1 OR T.rank = M.MaxRank;
推荐阅读
- javascript - 有什么原因我无法获取我的页面
- ios - 如何在 Swift 中使用 IAP 正确恢复购买
- javascript - 如何从java将参数传递给本地html文件
- .net - 使用 .NET Framework 1.1 为 .NET Framework 4.7.2 迁移 Microsoft .NET Web 服务
- ios - 已安排本地通知,但未在挂起和未运行模式下传递
- qt - 如何创建带有列标题的表格视图(5.12)?
- python - 为什么我一直收到第 93 行错误,说 TwitterClient 在上面的类中定义时未定义?
- javascript - 获取具有类名的字段集的所有子输入元素,输入元素只是字段集的间接子元素
- c# - 起订量用户管理器缺少 IUserEmailStore
- angular - 密码并以角度确认密码验证