Функция NTILE

Задача. Распределить баллончики по 3-м группам поровну. Группы заполняются в порядке возрастания v_id.

Эту задачу решает функция ранжирования NTILE, которая появилась в SQL Server 2008.

Эта функция возвращает номер группы, в которую попадает соответствующая строка результирующего набора.

select *, NTILE(3) OVER(order by v_id) gr from utv order by v_id;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Параметром функции NTILE является число групп. Остальное вам уже известно. :-)

Если мы захотим распределить порознь баллончики каждого цвета, то, как и для других функций ранжирования, можно добавить конструкцию PARTITION BY в предложение OVER:

select *, NTILE(3) OVER(PARTITION BY v_color order by v_id) gr
from utv order by v_color, v_id;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Обратите внимание на группы синего цвета (B). В двух первых группах оказалось по 6 баллончиков, а в третьей только 5. В случае, когда число строк не делится нацело на число групп, функция NTILE помещает в последние группы на одну строку меньше, чем в первые.

Наконец, если аргумент функции NTILE окажется больше числа строк, то будет сформировано количество групп, равное числу строк, и в каждой группе окажется по одной строке. 

Рекомендуемые упражнения: 130