PostgreSQLで NULL 値の順序はどうやって決めるのでしょう。

例えばひとつの列を普通の値は降順でソートして、かつNULLは最後に持ってくるにはどうしたらいいでしょうか?
OracleではNULL LASTがあるというページしか出てこなかったのですが…。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/03/12 00:04:19
  • 終了:--

回答(6件)

id:kurokw No.1

kurokw回答回数54ベストアンサー獲得回数02004/03/12 00:49:13

ポイント15pt

http://www.hatena.ne.jp/1079017459#

PostgreSQLで NULL 値の順序はどうやって決めるのでしょう。 例えばひとつの列を普通の値は降順でソートして、かつNULLは最後に持ってくるにはどうしたらいいでしょうか? .. - 人力検索はてな

URLはダミーです

もっとスマートな方法があるかも知れないですが・・・

CASE等でNULL判定してNULLだったら’1’、それ以外なら’0’みたいなフィールドを作って、それをORDER句の優先条件に含めることで実現はできると思います・・・

ベタな方法ですが・・・

id:katase_n

ありがとうございます。試してみましたがSQL文が結構長くなってしまいますね…。

2004/03/12 12:42:00
id:kanetetu No.2

kanetetu回答回数2199ベストアンサー獲得回数112004/03/12 09:05:28

ポイント5pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k10.htm

PostgreSQL 編10 - 問い合わせ、抽出、ソート、where、like、order by、desc - SAK Streets

こちらのページ参考になるとおもいます。

id:katase_n

ここは時々見ますがNULLの順序までは書いてないですよね…?

2004/03/12 12:49:20
id:tshioda No.3

tshioda回答回数48ベストアンサー獲得回数02004/03/12 13:09:32

ポイント5pt

http://www.hatena.ne.jp/1079017459#

PostgreSQLで NULL 値の順序はどうやって決めるのでしょう。 例えばひとつの列を普通の値は降順でソートして、かつNULLは最後に持ってくるにはどうしたらいいでしょうか? .. - 人力検索はてな

 select * from table where fieldname is not null order by fieldname union select * from table where fieldname is null;

みたいな感じでどうでしょう?

id:katase_n

エラーになってしまうのですが、union の前に order by は使えたでしょうか?

union の動作が今ひとつわからないです…。

2004/03/12 14:30:28
id:god_arrow_k2 No.4

god_arrow_k2回答回数88ベストアンサー獲得回数02004/03/12 15:58:26

ポイント45pt

http://ml.postgresql.jp/pipermail/pgsql-jp/2003-December/006932....

[pgsql-jp: 31790] Re: NULLの存在する列の逆順ソート

これでよいと思いますが。

id:katase_n

無事できました。ありがとうございます。

2004/03/12 16:36:12
id:tshioda No.5

tshioda回答回数48ベストアンサー獲得回数02004/03/12 16:02:07

ポイント10pt

すみません。確認せずに書いてしまいました。

select

fieldname

from (

select

fieldname

from

tablename

where

fieldname is not null

order by

fieldname desc

) as foo

union all

select

fieldname

from (

select

fieldname

from

tablename

where

fieldname is null

order by fieldname desc

) as bar

;

でいけると思います。

id:katase_n

一度別の名前にするということですね。今後の参考にします。

2004/03/12 16:38:17
id:yamagi3 No.6

yamagi3回答回数4ベストアンサー獲得回数02004/03/12 16:21:32

ポイント10pt

コレで出来ないでしょうか?

SELECT * FROM table_name ORDER BY COALESCE(sort_key, ’zzzzzz’);

PostgreSQLを使用したことがないので、もしエラーが出るようでしたらポイントは結構です。

id:katase_n

関数は使えるのですが思うようにソートされないです。。

order by でも coalesce は使えるのですね。

2004/03/12 16:48:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません