2017-06-27 14 views
0

这是数据从数据库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

为了更清楚,我想每个独特的球员有本垒打的最大数量了。然后我想按本垒打的数量排序所有这些独特的名字。

我想transfrom上表成这样:

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很多经验。

回答

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 
+0

大,它的工作原理。我只需要添加'ORDER BY运行DESC'。 – Alex

+0

欢迎,如果它可以帮助你可以投票正确的答案 – mohan111

相关问题