エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

OrderByでnullをascの最後尾に置く書き方【62日目】

Mysqlでnullをorderbyしてみた

id|number|
1 | 1|
2 | 2|
3 |null|
4 | 4|
5 | 5|

これのnumberを昇順(asc)でorderbyしたらどうなるか。

id|number|
3 |null|
1 | 1|
2 | 2|
4 | 4|
5 | 5|

ナンデダヨ。

どうして?

MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.3.4.6 NULL 値の操作

仕様っすか。

どうすればいい?

SQL

ORDER BY created_at IS NULL ASC, created_at ASC;

Laravel

->orderByRaw('number IS NULL ASC')
->orderBy('number', 'ASC')

なんでうまくいく?

一個目のORDER BY created_at IS NULL ASCで、NULLとそれ以外がソートされます。

つまり、nullその他が分けられますと。IS NULLとASCなので、

(その他 IS NULL)->0
(null IS NULL)->1
になりますよと。

あとは、その他をソートすると

id|number|
1 | 1|
2 | 2|
4 | 4|
5 | 5|
3 |null|

その他がソートされて、nullが一番後ろですよと。

日記

いい感じ。いろいろ学びがあるって素晴らしいね。

bootstrapは明日書こうそうしよう。

てかこっちの記事のほうがadvent calendarに使えたんzy(ry