第一次询问堆栈溢出。

我正在尝试使用两张表(其中一张包含击球统计数据,另一张包含玩家的姓名)来计算一年范围内每年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的领导者。我尝试了几种不同的分组方式,但似乎无法使其正常工作。有人可以协助吗?

最佳答案

如果您使用的是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

关于mysql - 如何在一年范围内每年为两个类别选择两个最大值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47059223/

10-13 01:26