PostgreSQLとMySQLでnull値を含むカラムのソート方法

null値を非null値の前にするか後にするかをORDER BYのパラメタで決定することができる。

null値のデフォルトの並び順はデータベースによって違います。カラムにnull値が含まれる場合は注意が必要です。

1. PostgreSQL

ORDER BY句で指定したカラムに続けて、NULLS FIRST / NULLS LASTを指定する。

--col1で昇順にしてnull値を最初に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 NULLS FIRST;

--col1で降順にしてnull値を最後に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 DESC NULLS LAST;

2. MySQL

ORDER BY句でIS NULL ASC / IS NULL DESCを指定する。

--col1で昇順にしてnull値を最初に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 IS NULL ASC, col1;

--col1で降順にしてnull値を最後に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 IS NULL DESC, col1 DESC;

3. Oracle

ORDER BY句で指定したカラムに続けて、NULLS FIRST / NULLS LASTを指定する。
PostgreSQLのCOALESCE関数と同じです。

--col1で昇順にしてnull値を最初に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 NULLS FIRST;

--col1で降順にしてnull値を最後に表示する
SELECT id, col1, col2 FROM table1 ORDER BY col1 DESC NULLS LAST;

4. その他

null値を置換する方法はPostgreSQLとMySQLでnull値だった場合に置換する方法をまとめたを参照してください。