株式会社プロネット

 

WEBシステム開発、ITコンサルティング、自社サービス、教育事業 - これからのビジネスへのIT活用ソリューションをご提案致します。

【MySQL】昇順ソートで、NULLを最後に表示する

2015.11.25(Wed) 19:00 | MySQL | sofuku

MySQLのOrder Byは、昇順でソートするとNULLの項目が一番上にきます。

しかし日付の昇順でソートし、かつ日付がNULLの項目を最後に表示したいというケースがあると思います。

今回はそんな場合の解決策をご紹介します。

環境

MySQL:5.6.14

 

例としてこのテーブルをdate項目の昇順でソートし、date項目がNULLのデータを一番最後に表示する場合。

sampleテーブル

+----+--------------+-------------+
| id | title        | date        |
+----+--------------+-------------+
|  1 | タイトル1   | 2015-11-01  |
|  2 | タイトル2   | NULL        |
|  3 | タイトル3   | 2015-11-10  |
|  4 | タイトル4   | 2015-11-05  |
|  5 | タイトル5   | 2015-11-20  |
+----+--------------+-------------+

SQLは下記のようになります。

SELECT * FROM sample ORDER BY date IS NULL ASC, date ASC;

ORDER BY句に「IS NULL ASC」を通常のASC指定の前に追加します。

 

余談ですが、ORACLEだと

SELECT * FROM sample ORDER BY date ASC NULL LAST;

で指定可能のようです。