Ben Postgresql sürümünü 9.1.9 kullanıyorum:dense_rank() emriyle nulls - nasıl sıralamanın alt sırasına göre davranılır?
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"
ve bir tek null bigint
sütunu (denilen A) sahiptir (Test denir) basit bir tablo var. tablo aşağıdaki verileri sahiptir:
NULL
1
2
Şimdi yoğun bir sıralama (dolayısıyla dense_rank() fonksiyonunu kullanarak) oluşturmak istiyorsanız bu yüzden aşağıdaki sorguyu yapın:
select "A", dense_rank() over (order by "A" desc) from public."Test"
Bu döndürür:
NULL,1
2,2
1,3
SQL Server 2008 R2'de tam olarak aynı şeyi kurup aynı sorguyu çalıştırırsam ilginç bir şekilde döner:
2,1
1,2
NULL,3
Yani, ancak, daha pratik, istediğim SQL Server davranışı böylece, nasıl PostgreSQL sıralamasında dibine olarak null adlı tedavi yapabilirsiniz doğrudur kimin ilgileniyorum?
(herhangi bir değerden küçük olduğu yani sıralama nulls)
Ben DENSE_RANK sayfasında bu fark, ancak bu işlevi hakkında spesifik olarak konuşmuyor, ama belki de bir ipucudur?
Not: SQL standardı SAYGI NULLS tanımlar veya kurşun, lag, FIRST_VALUE last_value ve nth_value için boş değerlere seçeneği YOKSAY. Bu, PostgreSQL'te uygulanan değildir: davranış her zaman standardıyla aynıdır, yani SAYI NULLS. Benzer şekilde, standardın FROM LÜTFEN ya da nth_value için FROM LAST seçeneği uygulanmadı: sadece varsayılan FROM İLK davranışı desteklenir. (Sipariş verdikten TARAFINDAN SİPARİŞ tersine çevirerek SON GELEN ait sonucu elde edebilirsiniz.)
harika - çok teşekkür! (Postgresql'in doğru olanı olabileceğini düşündüm, bu arada :-)) – kmp