NTILE
Делит строки раздела окна на заданное количество групп примерно равного размера и возвращает номер группы строки.
PostgreSQL 17.5
NTILE(number_of_groups) OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- number_of_groupsinteger
- Количество групп, положительное целое число
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, группы считаются в каждом разделе отдельно
- ORDER BYнеобязательный
- Порядок, в котором строки распределяются по группам
Возвращаемое значение
Целое число (integer) от 1 до number_of_groups
Примеры
Три группы по дате рождения
PostgreSQL 17.5
SELECT member_name,
birthday,
NTILE(3) OVER (
ORDER BY birthday
) AS age_group
FROM FamilyMembers;Квартили цен в платежах
PostgreSQL 17.5
SELECT payment_id,
unit_price,
NTILE(4) OVER (
ORDER BY unit_price
) AS price_quartile
FROM Payments;Подробности
Если строки не делятся поровну, первые группы получают на одну строку больше: 8 строк на 3 группы делятся как 3, 3 и 2. Если групп больше, чем строк, каждая строка попадает в свою группу.