グループ関数をORDER BY句で使う方法!MySQLで結果セットを並べ替えるテクニック
MySQLでは、ORDER BY句にグループ関数(集計関数)を指定することで、GROUP BY句によってまとめられた結果セットの各グループを自由に並べ替えることができます。
基本のポイント
- 並べ替えのデフォルトは昇順(ASC)です。
- DESCキーワードを付けることで、降順(逆順)に並べ替えられます。
COUNT(*)、SUM()、AVG()などの集計結果を基準にソートできるため、件数の多いグループを上位に表示するといった処理が簡単に行えます。- 集計関数だけでなく、SELECT文で取得している通常のカラムを基準にソートすることも可能です。
実行例
ここでは、従業員テーブル(employees)を役職(designation)と入社年(YEAR(Doj))でグループ化し、それぞれ異なる基準で並べ替えた例を紹介します。
例1:グループ関数 COUNT(*) の降順で並べ替える
mysql> Select designation, YEAR(Doj), count(*) from employees GROUP BY designation, YEAR(DoJ) ORDER BY Count(*) DESC; +-------------+-----------+----------+ | designation | YEAR(Doj) | count(*) | +-------------+-----------+----------+ | Prof | 2009 | 2 | | Asst.Prof | 2015 | 1 | | Asst.Prof | 2016 | 1 | | Prof | 2010 | 1 | | Asso.Prof | 2013 | 1 | +-------------+-----------+----------+ 5 rows in set (0.00 sec)
このクエリでは ORDER BY Count(*) DESC を指定しているため、該当件数が多いグループから順に表示されます。実際に、2件ヒットした「Prof & 2009年入社」のグループが先頭に来ているのが分かります。件数ランキングを作りたい場合に非常に便利な書き方です。
例2:通常のカラム(designation)の降順で並べ替える
mysql> Select designation, YEAR(Doj), count(*) from employees GROUP BY designation, YEAR(DoJ) ORDER BY designation DESC; +-------------+-----------+----------+ | designation | YEAR(Doj) | count(*) | +-------------+-----------+----------+ | Prof | 2009 | 2 | | Prof | 2010 | 1 | | Asst.Prof | 2015 | 1 | | Asst.Prof | 2016 | 1 | | Asso.Prof | 2013 | 1 | +-------------+-----------+----------+ 5 rows in set (0.00 sec)
こちらは ORDER BY designation DESC と指定しているため、役職名のアルファベット降順でグループが並べ替えられています。同じ役職内では元のグループ順が維持されます。
まとめ
ORDER BY句には集計関数をそのまま記述できるため、GROUP BYと組み合わせるだけで「件数の多い順にグループを表示する」ような集計レポートを簡単に作成できます。昇順・降順の使い分け(ASC/DESC)を覚えておくと、データ分析やレポート出力の幅が大きく広がります。
-
MySQLのGROUP BY句で各グループから1行だけを選択・抽出する方法
MySQLでは、GROUP BY句とサブクエリを組み合わせることで、各グループから特定の1行(たとえば最小のIDを持つ行)を取り出すことができます。本記事では、学生の点数データを例に、テーブル作成から実際のクエリ実行までの手順をわかりやすく解説します。 1. テーブルの作成 まず、以下のCREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable1572 -> ( -> StudentId int, &nb
-
C#のLINQでOrderByとGroupByを使う方法!サンプルコード付きで解説
C#のLINQには、コレクション内のデータを操作するためのさまざまな演算子が用意されています。本記事では、その中でも特によく使われる「OrderBy(並べ替え)」と「GroupBy(グループ化)」の基本的な使い方を、サンプルコードと実行結果をもとにわかりやすく解説します。 OrderByとは? OrderByは、配列やListなどのシーケンスを、指定したキーに基づいて昇順に並べ替えるための演算子です。文字列の場合は五十音順・アルファベット順、数値の場合は大小順にソートされます。 降順で並べ替えたい場合は、OrderByDescendingメソッドを使用します。 // 昇順でソート var as