MyTetra Share
Делитесь знаниями!
Оконные функции для ранжирования строк в выводе в PostgreSQL
01.01.2020
12:59
Автор: br0ke
Текстовые метки: postgresql, postgres, postgre, sql, window, function, aggregate, rank, dense, dense_rank, ranking, rating, competition, row, rows, row_number, number
Раздел: Информационные технологии - Базы данных - PostgreSQL

В PostgreSQL имеются несколько функций, которые можно использовать для присуждения мест участникам некоего соревнования.


  • row_number -- просто занумерует строки подряд, начиная от 1, все строки получат уникальные номера, даже если у них одинаковое количество "очков";
  • rank -- реализует стандартный алгоритм ранжирования, 1224; строки с одинаковым количеством очков получают одинаковое место, дальше пропускается количество мест;
  • dense_rank -- реализует "плотный" алгоритм ранжирования, 1223, как предудыщий, только строки не пропускаются никогда.


Формальный синтаксис:


RANK() OVER (

[PARTITION BY partition_expression, ... ]

ORDER BY sort_expression [ASC | DESC], ...

)


Использование:


SELECT

c,

RANK () OVER (

ORDER BY c

) rank_number

FROM

ranks;

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования