玩家表:
Name Catches Year
Brady 500 2017
Tom 400 2017
Gyt 350 2017
Brady 600 2018
Tom 660 2018
Gyt 750 2018
我希望它返回:
2017 Brady
2018 Gyt
说明:布雷迪(Brady)在2017年的捕鱼量比任何人都要多,而盖伊(Gyt)在2018年的捕鱼量比任何人都多
我已经尝试了什么:
SELECT NAME, SUM(Catches) as TotalCatches, Year
from Player
Group Name, Year
答案 0 :(得分:1)
考虑使用如下所示的RANK()或RowNumber()
SELECT p.*
FROM
(
SELECT [Year], [Name], Catches, RANK() OVER(PARTITION BY[YEAR] ORDER BY [Catches] DESC) RankOf
FROM Player
) P
WHERE RankOf=1;
答案 1 :(得分:0)
每位球员每年只记录一项,不需要汇总。
您可以使用相关子查询来隔离每年的最高记录:
SELECT p.*
FROM Player p
WHERE NOT EXISTS (
SELECT 1 FROM Player p1 WHERE p1.year = p.year AND p1.catches > p.catches
)
从SQLServer 2017开始,使用窗口函数是一种方法:
SELECT year, name, catches
FROM (
SELECT p.*, ROW_NUMBER() OVER(PARTITION BY p.year ORDER BY p.catches DESC) rn
FROM Player p
) x WHERE rn = 1
答案 2 :(得分:0)
您可以尝试使用相关子查询
SELECT a.*
FROM Player a
WHERE Catches in (
SELECT max(Catches) FROM Player b WHERE a.year = b.year
)