No.113
【MySQL】null値を含むカラムのソート
データの存在が確実でないカラムのソート
MySQLでデータがnot nullでないカラムをソートすると、nullのデータは最小値として扱われてしまうため、リストの先頭に来てしまう。
そのため、「誕生日登録済みのユーザーは誕生日で昇順にソート、未登録のユーザーはID順にソート」などという処理をするときに単純に
ORDER BY birthday
ではうまくいかない。
そんなときは、「null値は最下位だよ」とSQLに指示してやることでうまくソートできる。nullを最下位にするのは以下の構文で行うことができる。
ORDER BY birthday IS NULL, birthday ASC
これはMySQLでのnull値の扱われ方に起因している。
MySQL 5.6 リファレンスマニュアル > NULL 値の操作 > 3.3.4.6 NULL 値の操作
ORDER BY を実行する場合、NULL 値は ORDER BY ... ASC では最初に表示され、ORDER BY ... DESC では最後に表示されます。