如何在与另一列中的另一个值对应的列中查找值的最大值? (例子中的描述)

时间:2017-06-27 10:27:41

标签: sql sqlite

这是来自sqlite3数据库的数据示例:

playerID    nameFirst   nameLast    HR (homeruns)

bondsba01   Barry       Bonds       73
mcgwima01   Mark        McGwire     70
sosasa01    Sammy       Sosa        66
mcgwima01   Mark        McGwire     65
sosasa01    Sammy       Sosa        64
sosasa01    Sammy       Sosa        63
marisro01   Roger       Maris       61
ruthba01    Babe        Ruth        60
ruthba01    Babe        Ruth        59
foxxji01    Jimmie      Foxx        58
greenha01   Hank        Greenberg   58
...truncated...

我已使用此命令选择此数据:

SELECT Master.playerID, Master.nameFirst, Master.nameLast, Batting.HR
FROM Master
INNER JOIN Batting on Master.playerID = Batting.playerID
ORDER BY Batting.HR DESC
LIMIT 100;

Baiscally我想回答以下问题:按本垒打数量排名前20的棒球运动员是什么?但是,正如您所看到的,一些玩家有多个条目,因为这些表具有玩家活跃多年的数据。

我已经使用pandas和其他一些Python命令回答了这个问题。但我希望能够用一个SQL查询来回答这个问题。我在DISTINCTGROUP BY等方面尝试了一些没有成功的事情。

更清楚的是,我想要每个独特玩家拥有的最大本垒打数。然后我想按本垒打的数量对所有这些独特的名字进行排序。

我想从上表转换成:

playerID    nameFirst   nameLast    HR (homeruns)

bondsba01   Barry       Bonds       73
mcgwima01   Mark        McGwire     70
sosasa01    Sammy       Sosa        66
marisro01   Roger       Maris       61
ruthba01    Babe        Ruth        60
foxxji01    Jimmie      Foxx        58
greenha01   Hank        Greenberg   58

我想这不应该很难,但我对SQL没有多少经验。

1 个答案:

答案 0 :(得分:4)

使用MAX()

SELECT M.playerID, M.nameFirst, M.nameLast, MAX(B.HR) Runs
FROM Master M
INNER JOIN Batting B
    on M.playerID = B.playerID
GROUP BY M.playerID, M.nameFirst, M.nameLast