używam wersji PostgreSQL 9.1.9:dense_rank() według i null - jak sprawić, by traktowano je jako dno rankingu?
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"
i mam proste tabeli (zwany test), który ma jeden zerowalne bigint
kolumnę (zwany A). Tabela zawiera następujące dane:
NULL
1
2
Teraz chcę utworzyć gęstą rankingu (a więc za pomocą funkcji dense_rank()), więc wykonać następujące zapytanie:
select "A", dense_rank() over (order by "A" desc) from public."Test"
Powrócisz:
NULL,1
2,2
1,3
Co ciekawe, jeśli ustawię dokładnie to samo w SQL Server 2008 R2 i uruchomię to samo zapytanie, ono zwróci:
2,1
1,2
NULL,3
Tak, jestem zainteresowany, który jest poprawny, ale bardziej praktycznie, co chcę jest zachowanie SQL Server tak, jak mogę zrobić PostgreSQL traktować null jako dole rankingu?
(czyli null sortowania jako mniejsze niż wartość)
zauważyłem tego na stronie DENSE_RANK, ale nie mówi konkretnie o tej funkcji, ale być może jest to wskazówka?
Uwaga: średnia SQL definiuje null zobowiązań lub opcji null ołowiu, opóźnienie, FIRST_VALUE, last_value i nth_value zignorować. Nie jest to zaimplementowane w PostgreSQL: zachowanie jest zawsze takie samo, jak domyślne ustawienie standardu , a mianowicie RESPECT NULLS. Podobnie nie jest zaimplementowana standardowa opcja FROM FIRST lub FROM LAST dla nth_value: tylko jest zachowywane zachowanie domyślne FROM FIRST. (Można osiągnąć wynik z zeszłego przez odwrócenie kolejności zamawiając.)
świetnie - dzięki bardzo! (Myślałem, że postgresql może być poprawny, nawiasem mówiąc :-)) – kmp