勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLにてORDER BYで並べ替える際に空のカラムは後ろに持ってくる方法

  MySQL データベース

MySQLにてORDER BYで並べ替える際に空のカラムの場合は後ろに持っていき、その上でID(通し番号)順に並べ替えたい。具体的には「空じゃないカラムのID順→空のカラムのID順」という順序に並べ替えたい。以下に対応方法をメモ。

 

テーブル構造

mysql> SHOW COLUMNS FROM `test_table`;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

 

データ内容

mysql> TABLE `test_table`;
+----+--------+
| id | name   |
+----+--------+
|  1 | 山田   |
|  2 |        |
|  3 | 鈴木   |
|  4 |        |
|  5 | 田中   |
+----+--------+

 

対応方法

SELECT * 
FROM `test_table` 
ORDER BY 
CASE
    WHEN `name` IS NULL THEN "2"
    WHEN `name` = "" THEN "1"
    else "0"
END, 
    `id` ASC;

+----+--------+
| id | name   |
+----+--------+
|  1 | 山田   |
|  3 | 鈴木   |
|  5 | 田中   |
|  2 |        |
|  4 |        |
+----+--------+

nameカラムが空のデータを後ろに持っていき、その上でID順にソートされた。

 - MySQL データベース

  関連記事

MySQLでホスト指定しても正常に接続できない場合

MySQL自体は動いており、ユーザーも登録されているのに、ホスト名を指定しても正 ...

MySQLでdatetime型にもインデックスを使用して高速化を図る方法

ログ関連のデータを格納するテーブルがあり、集計を行う際に非常に時間がかかった。レ ...

MySQLでデータベース単位とテーブル単位のデータサイズ(容量)の調べ方

VPSの各種ファイルを整理している際に「MySQLも不要なデータを削除すればいい ...

MySQLでユーザー作成時にエラーが発生

SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...

MySQLで全角半角を区別せずに検索する方法(collate utf8_unicode_ci)

あるシステムでMySQLの検索時に「WHERE test_column coll ...