如何为一年中的每年两个类别选择两个最大值?

时间:2017-11-01 16:17:42

标签: mysql windows

第一次询问堆栈溢出。

我正在尝试使用两个表来计算一年范围内每年的NL和AL的OPS领导者,一个有击球统计数据,一个有球员名字。表的主键是playerID

击球表提供击球统计信息。我插入了计算OPS,基础百分比,段塞,击球表平均值的列,但我想在一年中为每个联赛(AL,NL)选择每个类别的最高领导者。

到目前为止我的代码是:

SELECT 
    batting.YearID as 'Year'
  , batting.LGID as 'League'
  , (SELECT concat(NAMEFIRST, ' ', NAMELAST) 
     from master 
     WHERE playerID = batting.playerID
    ) AS 'Player'
  , max(OPS) as 'On-Base Plus Slugging'
FROM batting 
WHERE batting.yearID BETWEEN 1959 AND 1969 
  AND AB > (SELECT AVG(AB) FROM BATTING)
GROUP BY batting.YearID, batting.lgID

我的输出只是每个联赛中每个联赛的第一位球员。我的目标是在每年的每个联赛中找到OPS的领导者。我尝试了几个不同的分组,但似乎无法让它工作。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是SQL Server 2008或更高版本:

;WITH ORDERED_OPS AS(
SELECT PlayerID,
    YearID,
    LGID,
    OPS,
    ROW_NUMBER() OVER (PARTITION BY LGID ORDER BY OPS DESC) OPS_Order
FROM batting)
SELECT PlayerID,
 YearID,
    LGID,
    OPS
FROM ORDERED_OPS
WHERE OPS_Order = 1