勉強したことのメモ

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のintのカラムで2147483647の値

MySQLでintのカラムに数値を入れると「2147483647」という値になっ ...

MySQLでグループ化したものを条件で絞る(HAVING)

正規化したテーブルがあってその中には idとtagのカラムがある。 でtagの方 ...

InnoDBのオートインクリメントで抜け番が発生する原因について

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...

MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法

何らかのフォームとMySQLを組み合わせた際に任意入力の項目はそのカラムがNUL ...

MySQLでデータがあれば上書き、無ければ挿入する

既存のソースを編集時に「REPLACE INTO~~」 という見たことの無いSQ ...