IT Rescue IT関連Tips情報

PostgreSQL: nullを含むカラムをソート,nullを末尾(先頭)に

2007年5月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の行を先頭にした結果を得ることができます.


コメントをどうぞ

免責事項

著作権者の文書による承諾を得ずに、本サイトの内容の一部、全部を無断で複写、複製、転載することは、禁じられています。
また、当ウェブサイト に記載された情報の完全性・正確性に対して一切の保証を与えるものではありません。当ウェブサイトに含まれる情報もしくは内容を利用することで直接・間接的に生じた損失に関し一切責任を負わないものとします。