MySQLのORDER BYでCASE WHENを使って独自の順序でソートする方法
MySQLのORDER BYでCASE WHENを使う
MySQLでは、ORDER BY句の中でCASE WHEN(CASE式)を組み合わせることで、アルファベット順や数値順ではなく、独自に定義した任意の順序でレコードを並べ替えることができます。
「特定の値を先頭に表示したい」「カテゴリごとに優先順位をつけたい」といったケースで非常に便利なテクニックです。以下、具体例を見ていきましょう。
1. サンプルテーブルの作成
まずはテーブルを作成します。
mysql> create table DemoTable( Color varchar(100) ); Query OK, 0 rows affected (0.64 sec)
2. レコードの挿入
INSERT文を使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable values('Red');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Green');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Blue');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Yellow');
Query OK, 1 row affected (0.18 sec)
3. テーブルの内容を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------+ | Color | +--------+ | Red | | Green | | Blue | | Yellow | +--------+ 4 rows in set (0.00 sec)
4. ORDER BYとCASE WHENを組み合わせた並べ替え
ここからが本題です。CASE WHENを使って、色ごとに優先度(数値)を割り当て、その順序で並べ替えます。
mysql> select *from DemoTable order by case Color when 'Blue' then 10 when 'Green' then 20 when 'Yellow' then 30 else 100 end ;
実行結果:
+--------+ | Color | +--------+ | Blue | | Green | | Yellow | | Red | +--------+ 4 rows in set (0.00 sec)
動作の仕組み
このクエリでは、CASE式が各行のColor値を評価し、対応する数値を返します。
- 'Blue' → 10
- 'Green' → 20
- 'Yellow' → 30
- それ以外(この例では'Red')→ 100
ORDER BYはこの数値の昇順でソートを行うため、「Blue → Green → Yellow → Red」の順に出力されます。どの条件にも一致しない行はELSEで指定した値(ここでは100)となるため、自動的に末尾へ配置される仕組みです。
まとめ
ORDER BY CASEを活用すれば、データベース側だけで柔軟なカスタムソートを実現できます。タスクのステータス順の並べ替えや、重要な項目の先頭固定表示など、実務でも頻繁に役立つテクニックなので、ぜひマスターしておきましょう。
-
【PostgreSQL】MySQLのORDER BY FIELD()関数をシミュレートする方法
MySQLではFIELD()関数を使うことで、特定の値を優先的に並べ替えることができます。しかし、PostgreSQLにはFIELD()関数が存在しないため、同じ動作を実現するにはCASE式を組み合わせる必要があります。この記事では、オンラインコンパイラを使用してPostgreSQLを動作させながら、MySQLのORDER BY FIELD()をシミュレートする具体的な手順を解説します。準備:サンプルテーブルの作成まず、デモ用のテーブルを作成します。ここでは国名を格納するシンプルなテーブルを用意しました。create table PostgreOrderIdDemo ( country
-
MySQLのCASE WHENステートメントで条件別のカウントを実行する方法
条件に応じてレコードをカウントしたい場合には、CASE WHENステートメントを活用すると便利です。この記事では、サンプルテーブルを作成し、SUM関数と組み合わせて条件別の件数を集計する手順を、実行結果つきでわかりやすく解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1910 ( FirstName varchar(20), Marks int ); Query OK, 0 rows affected (0.00 sec) 2. レコードの挿入 続い