Справочник по функциям

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;
member_namebirthdayage_group
Headley Quincey1960-05-131
Ernest Forrest1961-09-111
Flavia Quincey1963-02-161
Constance Forrest1968-09-062
Andie Quincey1983-06-052
Lela Quincey1985-06-072
Annie Quincey1988-04-103
Wednesday Addams2005-01-133

Квартили цен в платежах

PostgreSQL 17.5
SELECT payment_id,
	unit_price,
	NTILE(4) OVER (
		ORDER BY unit_price
	) AS price_quartile
FROM Payments;
payment_idunit_priceprice_quartile
1671
1971
1881
1581
1781
22101
26161
3202
27592
61002

Подробности

Если строки не делятся поровну, первые группы получают на одну строку больше: 8 строк на 3 группы делятся как 3, 3 и 2. Если групп больше, чем строк, каждая строка попадает в свою группу.

Смотрите также