問題:
データをグループに集約しましたが、グループ内の要素の数で降順でレコードを並べ替えたいと考えています。
例:
データベースには、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 |