плотно_rank () упорядочивает по и нулям - как заставить его рассматривать их как нижнюю часть рейтинга?

Я использую 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"

и у меня есть простая таблица (называемая Test), в которой есть один столбец bigint с нулевым значением (называемый A). В таблице есть следующие данные:

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 как меньше любого значения)

Я заметил это на странице плотности_ранка, но там не говорится конкретно об этой функции, но, возможно, это подсказка?

Примечание. Стандарт SQL определяет параметр УВАЖАТЬ NULLS или ИГНОРИРОВАТЬ NULLS для опережения, отставания, первого_значения, последнего_значения и n-го_значения. Это не реализовано в PostgreSQL: поведение всегда такое же, как и стандартное по умолчанию, а именно УВАЖЕНИЕ NULL. Аналогичным образом стандартная опция FROM FIRST или FROM LAST для nth_value не реализована: поддерживается только поведение по умолчанию FROM FIRST. (Вы можете получить результат FROM LAST, изменив порядок ORDER BY.)


person kmp    schedule 18.06.2013    source источник


Ответы (1)