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 では最後に表示されます。