PostgreSQL: nullを含むカラムをソート,nullを末尾(先頭)に
2007.05.18
PostgreSQLでnull値を含むカラムでソートするとき,nullのレコードを末尾(あるいは先頭)に出力するSQLの書き方.
以下のようなテーブルの場合を考えます.
yostest=> SELECT * from foo order by i;
i | t
----+--------
0 | zero
1 | one
2 | two
10 | ten
11 | eleven
| none
(6 rows)
* ORDER BY句には条件式が記述できます.
* booleanの値をソートした場合 true は false より高い(大きい)値としてソートされます.
したがって,例のfooテーブルでカラムiで降順にソートし,かつ null の行を末尾にしたい場合は以下のSQLで実現できます.
yostest=> SELECT * from foo order by (i is null), i desc;
i | t
----+--------
11 | eleven
10 | ten
2 | two
1 | one
0 | zero
| none
(6 rows)
つまり,まず i is null の結果でソートします.i is null がtrueの行は i is null が false の行よりも大きい値ですから,「ORDER BY (i is null) 」のソート条件では末尾に出力されます.次に「ORDER BY i desc 」のソートが行われるので,目的の検索結果を得ることができます.
i is not null や (i is null) desc 等を使えば,nullの行を先頭にした結果を得ることができます.カテゴリー:技術情報メモ
