LoginSignup
2
1

More than 1 year has passed since last update.

Boolean だって ORDER BY できるもん

Last updated at Posted at 2021-11-30

NULL を含むデータをソートするときに NULL を先頭に持ってきたり、末尾に持ってきたりしたいときがあると思います。そんなときは、真偽値でもソートできるということを知っておくと、NULL のソート順を自在に扱うことができます。

NULLのソート順

PostgreSQL において、以下のようなテーブルのデータがあったとき、

id val01
1 b
2 a
3 NULL
4 c

単純に val01 で ORDER BY をかけると

SELECT * FROM test_data ORDER BY val01;

以下のように NULL の行が最後に来ます。NULLは常に最大値という扱いなんですね。

id val01
2 a
1 b
4 c
3 NULL

NULL でない val01のソート順はそのままで、NULL の行を先頭に持っていくには、以下のようにします。

SELECT * FROM test_data ORDER BY val01 IS NULL DESC, val01;
id val01
3 NULL
2 a
1 b
4 c

まず val01 が NULL かどうかの真偽値でソートしてから val01 でソートするという順序になっています。
真偽値の昇順は false -> true の順なので、NULL を最初に持ってくるには val01 IS NULL の降順(DESC) を指定するわけです。

このように Boolean を利用したソートを入れることで、並び替えの幅が広がりますので、ぜひご活用ください。

おまけ (NULL の順番)

実は、NULL を最大値とするか最小値とするかは、DBMS の実装によって異なります。
MySQL の場合は、NULL を最小値として扱うため、以下の SQL で NULL の行が先頭に来ます。

SELECT * FROM test_data ORDER BY val01;

MySQL の場合:

id val01
3 NULL
2 a
1 b
4 c
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1