Оконные функции

Разделение на группы - NTILE

Функция ntile(количество_групп) разделяет результирующий набор на указанное количество групп.

Разобьем проданные товары на три группы по количеству проданных единиц товара:

SELECT pi.product_id,
       sum (pi.count) AS count_total,
       ntile(3) over (ORDER BY sum(pi.count) desc)
  FROM purchase_item pi
 GROUP BY pi.product_id
#product_idcount_totalntile
12351
2861
3321
4521
51022
6922
7612
81112
9713
101213
11413

Как вычисляется ntile для строки?

Шаг 1. Результат запроса сортируется по условию, указанному в ORDER BY внутри over функции ntile.

Шаг 2. Отсортированные строки равномерно делятся на количество указанных групп.

Если количество строк не делится целочисленно на количество групп, то в первых группах будет больше на одну строку. В нашем примере 11 строк и 3 группы. Следовательно в первой группе будет 4 строки, во второй - 4 строки, а в третьей - 3.

ПредыдущаяСледующая