查找一年中的最大捕捞量

时间:2019-02-23 01:35:07

标签: sql sql-server tsql

玩家表:

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

3 个答案:

答案 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 
)