PostgreSQLでorderする際の、null値の扱い
postgresqlではnull値はディフォルトで最小値と判定されちゃいます。
たとえば
こんなテーブルからカラム「number」がnull値であるデータを含めてselectしてみました。
このようにnull値が先頭に来てしまいます。
postgreSQLではこんな時、こんな対処法があります。
この方法では、ますorder句の(number is null)によって
nullか否かの判定(boolean)によるソートを実行します。
その次にnumber descによるソートを実行しますので
結果、numberの値でソートされかつnullの場合は最後にレコードが並ぶようなります。
たとえば
test=# \d test
Table "public.test"
Column | Type | Modifiers
---------+-----------------------------+---------------------------------------------------
id | integer | not null default nextval('test_id_seq'::regclass)
number | integer |
created | timestamp without time zone | default now()
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
Table "public.test"
Column | Type | Modifiers
---------+-----------------------------+---------------------------------------------------
id | integer | not null default nextval('test_id_seq'::regclass)
number | integer |
created | timestamp without time zone | default now()
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
こんなテーブルからカラム「number」がnull値であるデータを含めてselectしてみました。
test=# select number from test order by number desc;
number
--------
10
9
8
7
6
5
4
3
2
1
(15 rows)
number
--------
10
9
8
7
6
5
4
3
2
1
(15 rows)
このようにnull値が先頭に来てしまいます。
postgreSQLではこんな時、こんな対処法があります。
select
number
from
test
order by
(number is null),
number desc;
number
from
test
order by
(number is null),
number desc;
この方法では、ますorder句の(number is null)によって
nullか否かの判定(boolean)によるソートを実行します。
その次にnumber descによるソートを実行しますので
結果、numberの値でソートされかつnullの場合は最後にレコードが並ぶようなります。
test=# select number from test order by (number is null),number desc;
number
--------
10
9
8
7
6
5
4
3
2
1
(15 rows)
number
--------
10
9
8
7
6
5
4
3
2
1
(15 rows)
スポンサーサイト
コメント
コメントの投稿
« Apacheの自動起動 / サービスへの登録 ・・・Linux(centOS) l Home l PostgreSQLへの接続数を確認する »