MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで条件に基づいて並べ替える方法:ORDER BY CASE WHENの使い方

MySQLで特定の条件に基づいてレコードを並べ替えたい場合は、ORDER BY句とCASE WHEN式を組み合わせて使用します。これにより、標準的な昇順・降順ではなく、独自のカスタム順序でデータを柔軟にソートできます。

テーブルの作成

まず、サンプル用のテーブルを作成しましょう。

mysql> create table demo51
-> (
-> id int not null auto_increment primary key,
-> name varchar(20)
-> );
Query OK, 0 rows affected (1.08 sec)

レコードの挿入

次に、INSERTコマンドを使用してテーブルにいくつかのレコードを挿入します。

mysql> insert into demo51(name) values('John');
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo51(name) values('Bob');
Query OK, 1 row affected (0.09 sec)

mysql> insert into demo51(name) values('David');
Query OK, 1 row affected (0.35 sec)

mysql> insert into demo51(name) values('Sam');
Query OK, 1 row affected (0.14 sec)

レコードの表示

SELECT文を使って、テーブル内のレコードを確認してみましょう。

mysql> select *from demo51;

上記のクエリを実行すると、以下のような出力が得られます。

+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Bob |
| 3 | David |
| 4 | Sam |
+----+-------+
4 rows in set (0.00 sec)

条件に基づく並べ替えクエリ

以下は、CASE WHEN式を使って条件に従って並べ替えを行うクエリです。name列の値ごとに異なる数値を割り当て、その数値の昇順でソートされます。

mysql> select *from demo51
-> order by
-> case when name="John" then 110
-> when name="Bob" then 105
-> when name="David" then 104
-> else 101
-> end;

実行結果は以下の通りです。Sam(101)、David(104)、Bob(105)、John(110)の順に並んでいることがわかります。

+----+-------+
| id | name |
+----+-------+
| 4 | Sam |
| 3 | David |
| 2 | Bob |
| 1 | John |
+----+-------+
4 rows in set (0.00 sec)

このように、ORDER BY句の中でCASE WHENを使用することで、任意の条件に応じた柔軟な並べ替えが可能になります。どのWHEN条件にも一致しないレコードは、ELSE句で指定した値に基づいてソートされるため、優先順位をつけた表示やステータスごとの並べ替えなど、実務でも幅広く活用できるテクニックです。

  1. MySQLのORDER BY CASEを使って指定したIDのカスタム順序でレコードを取得する方法

    MySQLでは、WHERE ... IN(...)で複数のIDを指定しても、通常は結果が指定した順序どおりに返されません。IDを渡された通りのカスタム順序で維持したい場合は、ORDER BY CASE文を使用します。この記事では、具体的なサンプルを使ってその手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1550 -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (

  2. MySQLのORDER BY ASCでNULL値を最下部に表示する方法

    MySQLのORDER BY ASCでNULL値を最下部に表示する方法MySQLでは、ORDER BY句を昇順(ASC)で使用した場合、デフォルトではNULLが先頭(上部)に表示されます。しかし実務では、「NULLは一番下に表示したい」というケースがよくあります。このような場合には、CASE式とORDER BYを組み合わせることで簡単に実現できます。この記事では、NULLや空文字列()を含むデータを昇順ソートしつつ、NULLを最下部に表示する方法を、具体的なサンプルコードとともに解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table D