勉強したことのメモ

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にてUUIDを発行しプライマリキー(主キー)にする方法
MySQLにてUUIDを発行しプライマリキー(主キー)にする方法

普段MySQLでプライマリキー(主キー)を使う場合、オートインクリメントを利用し ...

PHP / MySQLで2038年問題の対策
PHP / MySQLで2038年問題の対策

先日打ち合わせの際に「タイムスタンプを使ってユニークキーに云々~~」といったよう ...

MySQLでCSVから列を指定してインポート
MySQLでCSVから列を指定してインポート

MySQLでCSVからデータをインポートしたかった。またエクセル風にいうA列はi ...

MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法
MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法

MySQLにてdatetime型のカラムに登録日時等を格納しており、管理画面側で ...

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

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