2017-06-27 9 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クエリで質問に答えることができるようにしたい。私はDISTINCTGROUP BYなど

と2つのことを成功させずに試しました。もっと明確にするために、私は一人のプレイヤーが持っていたホームランの最大数を求めます。そして、私はこれらの一意の名前すべてをホームランの数で並べ替える必要があります。

私はこれに、上記の表を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での多くの経験を持っていないと思います。 MAXを使用して

答えて

4

()グレート

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 Runs DESC'を追加するだけでした。 – Alex

+0

正解として投票できる場合は歓迎します – mohan111

関連する問題