[pgsql-jp: 35449] Re: ソート順でNULLの順番がバージョンによって異なる場合はありますか?

Kachou Utumi [内海 花鳥] kachou @ mx1.freecom.ne.jp
2005年 6月 1日 (水) 05:17:53 JST


Kouichi Matsumoto さんは書きました:

>下記な感じで2つのサーバーでNULLデータの表示順が異なっています。
>バージョンの差異でこのような事はありましたでしょうか?
>
>7.2.3
>num
>---
>null
>1
>0
>
>7.3.5
>num
>---
>1
>0
>null
>
>http://ml.postgresql.jp/pipermail/pgsql-jp/2003-December/006924.html
>とは逆で7.3.5でnullを一番上にしたいのですがどうすれば良いでしょうか?

自前の環境が8.0.2なので、参考になるか判りませんが、8.0.2でも同様にソートした際に
NULLは下(後)にきます。

unionでも使えば良いんじゃないかと、安直に考えてunion allでNULLを先に出力させて
その後にNULL以外を出力させる事は可能なのが判りましたが、NULL以外をソートすると
NULLまで含めた状態でソートされてしまいました。

#unionだけだと、やはりNULLが後ろに来ます。

これじゃ駄目だなと別の手段として、ふとviewで、ソートした結果を作ってから,union allで
nullを先に出して、その後にnull以外を出力させる手法だと、nullが一番上(最初)に出力し
残りのデータをソートされた状態で出力されました。

重複有り無しで、ちとSQLが変わりますが以下のようにやってみました。

view製作
create view v_tbl as select num from hoge order by num

重複あり
select num from v_tbl where num is null union all select num from v_tbl where num is not null

重複なし
select distinct num from v_tbl where num is null union all select distinct num from v_tbl where num is not null

以前のMLに投稿されたのも、union allのnull条件を変えれば満たせると思います。
参考になれば幸いです。



pgsql-jp メーリングリストの案内