这是来自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查询来回答这个问题。我在DISTINCT
,GROUP 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没有多少经验。
答案 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