ROW_NUMBER, RANK И DENSE_RANK ВНУТРИ ГРУППЫ В POSTGRESQL

  • Михаил
  • 12 мин. на прочтение
  • 119
  • 11 Nov 2022
  • 11 Nov 2022

В этом уроке мы будем использовать функцию row_number , rank и плотное ранг в postgresql для ранжирования в группе с использованием предложения PARTITION BY.

ROW_NUMBER:  возвращает последовательность и уникальный номер для каждой группы на основе полей, примененных в предложении PARTITION BY. Если PARTITION BY не указан, функция обрабатывает все строки набора результатов запроса как одну группу.

RANK:  аналогична функции ROW_NUMBER и возвращает ранг каждой строки в разделе результирующего набора.

DENSE_RANK:  возвращает ранг строк в разделе результирующего набора без пробелов в ранжировании.

Таблица BASKET , которую мы используем для изображения, показана ниже .

Ранг row_number и плотность_ранга в postgresql 1

 

ROW_NUMBER в postgresql:

ROW_NUMBER в postresql возвращает номер строки для каждой группы

select *, ROW_NUMBER () OVER (
PARTITION BY item_group
ORDER BY
price
) from Basket;

Таким образом, результирующая таблица с row_number равна

Ранг row_number и плотность_ранга в postgresql 2

 

РАНГ в postgresql

RANK в postresql присваивает ранг каждой группе. Если значение остается прежним, то оба числа получат одинаковый ранг, а следующий ранг будет пропущен.

select *, RANK () OVER (
PARTITION BY item_group
ORDER BY
price
) from Basket;

Таким образом, результирующая таблица с рангом

Ранг row_number и плотность_ранга в postgresql 3

 

DENSE_RANK в postgresql

DENSE_RANK в postresql присваивает ранг каждой группе. Ранги присваиваются без пробелов, поэтому рейтинг не будет пропущен.

select *, DENSE_RANK () OVER (
PARTITION BY item_group
ORDER BY
price
) from Basket;

Таким образом, результирующая таблица с рангом

Ранг row_number и плотность_ранга в postgresql 4