NTILE
Делит строки раздела окна на заданное количество групп примерно равного размера и возвращает номер группы строки.
MySQL 8.4
NTILE(number_of_groups)- number_of_groups
- Количество групп, положительное целое числоINT
Возвращаемое значение
Целое число (BIGINT UNSIGNED) от 1 до number_of_groups
Примеры
Три группы по дате рождения
MySQL 8.4
SELECT member_name,
birthday,
NTILE(3) OVER (
ORDER BY birthday
) AS age_group
FROM FamilyMembers;Границы четвертей по сумме заказа
MySQL 8.4
SELECT bucket,
MIN(total_amount) AS min_amount,
MAX(total_amount) AS max_amount,
COUNT(*) AS orders
FROM (
SELECT total_amount,
NTILE(4) OVER (
ORDER BY total_amount
) AS bucket
FROM orders
) AS t
GROUP BY bucket
ORDER BY bucket;Подробности
Если строки не делятся поровну, первые группы получают на одну строку больше: 8 строк на 3 группы делятся как 3, 3 и 2. Если групп больше, чем строк, каждая строка попадает в свою группу. Строки с одинаковым значением ORDER BY могут оказаться в разных группах, а без ORDER BY строки распределяются по группам произвольно.