Функция NTILE
Эту задачу решает функция ранжирования NTILE, которая появилась в SQL Server 2008.
Эта функция возвращает номер группы, в которую попадает соответствующая строка результирующего набора.
select *, NTILE(3) OVER(order by v_id) gr from utv order by v_id;
[[ 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;
[[ column ]] |
---|
[[ value ]] |
Обратите внимание на группы синего цвета (B). В двух первых группах оказалось по 6 баллончиков, а в третьей только 5. В случае, когда число строк не делится нацело на число групп, функция NTILE помещает в последние группы на одну строку меньше, чем в первые.
Наконец, если аргумент функции NTILE окажется больше числа строк, то будет сформировано количество групп, равное числу строк, и в каждой группе окажется по одной строке.
Рекомендуемые упражнения: 130