問題:
レコードのグループによって生成された合計で行を並べ替えたい。
例:
私たちのデータベースには、training 4列のデータ: id 、ログイン 、年 、およびスコア 。
| id | ログイン | 年 | スコア |
|---|---|---|---|
| 1 | アンディ | 2018 | 24 |
| 2 | ルーシー | 2019 | 25 |
| 3 | アンディ | 2019 | 20 |
| 4 | ルーシー | 2018 | 16 |
| 5 | ゲイリー | 2019 | 18 |
| 6 | ゲイリー | 2018 | 19 |
| 7 | ゲイリー | 2017 | 22 |
| 8 | ルーシー | 2017 | 21 |
| 9 | アンディ | 2017 | 26 |
各プレーヤーのログイン名と、すべての年のスコアの合計を取得し、プレーヤーの合計スコアに従ってレコードを降順に並べていきましょう。
解決策:
演算子ORDERBYを使用して、集計関数SUM()に基づいてレコードを並べ替えます。 、これは、すべての年にわたる各プレーヤーの合計スコアを計算します。
作成するクエリは次のとおりです。
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
結果は次のとおりです。
| ログイン | total_score |
|---|---|
| アンディ | 70 |
| ルーシー | 62 |
| ゲイリー | 59 |
ディスカッション:
SUM()などの集計関数によって返される値に従って行を並べ替える場合は、ORDERBYを使用します。 。 ORDER BY演算子の後には、集計関数(この例では、SUM())が続きます。 )。 DESCは、この関数の後に配置され、降順のソート順を指定します。したがって、最も高い集計値が最初に表示され、次に徐々に低い値が表示されます。昇順で並べ替えるには、ASCを指定するか、昇順がデフォルトの並べ替え順序であるため、いずれかのキーワードを省略します。
上記のクエリでは、各プレーヤーのログインとすべての年のスコアの合計を選択します。この合計スコアは、スコア列を引数としてSUM()を使用して計算されます。この集計値のエイリアスを追加します(SUM(score) AS total_score ); ORDER BY句の集計関数の代わりにこのエイリアスを使用できます(ORDER BY total_score DESC 。
ログインが含まれていることに注意してください GROUPBYで。 SELECTに列を含める場合は、GROUPBYの列も使用する必要があります。この例では、この列をSELECTに配置するため、GROUPBY句の後に列loginを使用します。クエリでは、GROUPBYがORDERBYの前に配置されていることに注意してください。