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

【MySQL】CASEステートメントを使ってORDER BYの並び順を自由にカスタマイズする方法

MySQLでレコードを取得する際、標準の ORDER BY では昇順・降順しか指定できませんが、CASEステートメントを組み合わせれば、値ごとの優先順位に従った「任意の並び順」でソートすることができます。ここでは、その具体的な手順をサンプル付きで解説します。

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table DemoTable(StudentId varchar(100));
Query OK, 0 rows affected (1.69 sec)

2. テストデータの挿入

続いて、insertコマンドでいくつかのレコードを追加しましょう。

mysql> insert into DemoTable values('STU-980');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('STU-1029');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('STU-189');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('STU-890');
Query OK, 1 row affected (0.38 sec)

3. 現在のデータを確認する

select文でテーブル内の全レコードを表示します。

mysql> select *from DemoTable;

実行結果は以下のとおりです。現時点では挿入した順番のまま表示されています。

+-----------+
| StudentId |
+-----------+
| STU-980   |
| STU-1029  |
| STU-189   |
| STU-890   |
+-----------+
4 rows in set (0.00 sec)

4. CASEステートメントで並び順を指定する

以下が、CASEステートメントを使って任意の順序でソートするクエリの例です。WHEN 句で各値に対応する番号(優先度)を割り当てることで、その番号の昇順に並べ替えられます。

mysql> select *from DemoTable
    order by case WHEN StudentId = 'STU-890' THEN 1
    WHEN StudentId = 'STU-1029' THEN 2
    WHEN StudentId = 'STU-980' THEN 3
    WHEN StudentId = 'STU-189' THEN 4
    end;

実行結果は次のとおりです。指定した通りの順序(STU-890 → STU-1029 → STU-980 → STU-189)で表示されていることがわかります。

+-----------+
| StudentId |
+-----------+
| STU-890   |
| STU-1029  |
| STU-980   |
| STU-189   |
+-----------+
4 rows in set (0.08 sec)

ポイントまとめ

  • ORDER BY 句の中で CASE を使うと、値ごとに数値を返し、その数値順にソートできる。
  • WHEN で指定しなかった値はすべて NULL として扱われるため、必要に応じて ELSE でデフォルトの優先度を設定すると安全です。
  • ステータス(例:「処理中」「完了」「保留」)など、意味のある順序で表示したい場合に特に便利なテクニックです。
  1. 【PostgreSQL】MySQLのORDER BY FIELD()関数をシミュレートする方法

    MySQLではFIELD()関数を使うことで、特定の値を優先的に並べ替えることができます。しかし、PostgreSQLにはFIELD()関数が存在しないため、同じ動作を実現するにはCASE式を組み合わせる必要があります。この記事では、オンラインコンパイラを使用してPostgreSQLを動作させながら、MySQLのORDER BY FIELD()をシミュレートする具体的な手順を解説します。準備:サンプルテーブルの作成まず、デモ用のテーブルを作成します。ここでは国名を格納するシンプルなテーブルを用意しました。create table PostgreOrderIdDemo ( country

  2. MySQLのENUMフィールドを使って行を選択する方法

    MySQLでは、ENUM型のカラムを条件に指定して行を抽出することができます。ここでは、ENUMフィールドを使用して特定の行を選択する手順を、実際のSQL文と実行結果とともに解説します。サンプルテーブルの作成まず、ENUM型のカラムを持つテーブルを作成します。以下の例では、従業員の雇用形態を格納する「EmployeeStatus」カラムに、「FULLTIME」と「Intern」という2つの値を許容するENUM型を定義し、デフォルト値をNULLに設定しています。mysql> create table DemoTable    -> (