問題:
データをグループに集約しましたが、グループ内の要素の数で降順でレコードを並べ替えたいと考えています。
例:
データベースには、user
次の列にデータがあります:id
、first_name
、last_name
、およびcountry
。
id | first_name | last_name | 国 |
---|---|---|---|
1 | リサ | ウィリアムズ | イングランド |
2 | ゲイリー | アンダース | ポーランド |
3 | トム | ウィリアムズ | ポーランド |
4 | マイケル | ブラウン | フランス |
5 | スーザン | スミス | 米国 |
6 | アン | ジョーンズ | 米国 |
7 | エリー | ミラー | ポーランド |
ユーザーに関するレポートを作成しましょう。結果をcountry
でグループ化します 各国のユーザー数を数えます。ただし、ユーザー数の降順でグループも並べ替えます。そうすれば、ユーザー数が最も多い国が一番上に表示されます。
解決策:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
国 | count(id) |
---|---|
ポーランド | 3 |
米国 | 2 |
イングランド | 1 |
フランス | 1 |
ディスカッション:
選択したレコードを各グループの要素数で並べ替えるには、ORDER BY
を使用します 条項。
最初のステップは、GROUP BY
を使用することです グループを作成する句(この例では、country
でグループ化します 桁)。次に、ORDER BY句で、選択した列の値の数をカウントする集計関数COUNTを使用します。この例では、COUNT(id)
を使用して個別のIDをカウントします 。これにより、各グループの要素数が効果的にカウントされます。 ORDER BY
次に、句はその計算に従ってグループをソートします。
いつものように、ORDER BY
では昇順と降順の両方を使用できます 。 (この例のように)降順が必要な場合は、DESC
を使用します キーワード。昇順はデフォルトであるためキーワードは必要ありませんが、ASC
を使用できます。 明示的にしたい場合はキーワード。これは同じ例ですが、結果が昇順で並べ替えられています:
解決策:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
結果は次のとおりです。
国 | count(id) |
---|---|
イングランド | 1 |
フランス | 1 |
米国 | 2 |
ポーランド | 3 |