Postgresql バージョン 9.1.9 を使用しています。
select version();
"PostgreSQL 9.1.9 on armv7l-unknown-linux-gnueabihf,
compiled by gcc (Debian 4.6.3-14+rpi1) 4.6.3, 32-bit"
bigint
そして、単一のnull許容列(Aと呼ばれる)を持つ単純なテーブル(Testと呼ばれる)があります。テーブルには次のデータがあります。
NULL
1
2
ここで、密なランキングを作成したいので(dense_rank()関数を使用)、次のクエリを実行します。
select "A", dense_rank() over (order by "A" desc) from public."Test"
これは以下を返します:
NULL,1
2,2
1,3
興味深いことに、SQL Server 2008 R2 でまったく同じものをセットアップし、同じクエリを実行すると、次のように返されます。
2,1
1,2
NULL,3
だから、私は誰が正しいのか興味がありますが、より実際には、SQL Server の動作が必要なので、PostgreSQL に null をランキングの最下位として扱うにはどうすればよいですか?
(つまり、どの値よりも小さいものとして NULLS を並べ替えます)
これはdense_rankのページで気付きましたが、特にこの機能について語っているわけではありませんが、もしかしたら手がかりになるのではないでしょうか?
注: SQL 標準では、lead、lag、first_value、last_value、および nth_value に対して RESPECT NULLS または IGNORE NULLS オプションが定義されています。これは PostgreSQL では実装されていません。動作は常に標準のデフォルト、つまり RESPECT NULLS と同じです。同様に、nth_value の標準の FROM FIRST または FROM LAST オプションは実装されていません。デフォルトの FROM FIRST 動作のみがサポートされています。(ORDER BY の順序を逆にすることで、FROM LAST の結果を得ることができます。)