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の行を先頭にした結果を得ることができます.
カテゴリー:技術情報メモ