T-SQLでn個のグループにわける
NTILE関数を使うと簡単にデータをn個のグループにわけることができます。正確には、n個のグループにわけた場合のグループ番号を割り振ると言ったほうがいいかもしれません。
NTILE (Transact-SQL) | Microsoft Docs
NTILE関数を使ったサンプルを書いてみます。
まず適当なデータ、今回は11から20までの10個の数値を用意します。
drop table if exists #Sequence; -- 11から20までの10個の数値を生成 with Source(Value) as( select 11 union all select Value + 1 from Source ) select top 10 * into #Sequence from Source; -- 確認 select * from #Sequence; /* Value ----------- 11 12 13 14 15 16 17 18 19 20 */
この11から20までの数値を3つのグループにわけたいと思います。
-- 3つのグループにわける declare @group int = 3; select *, -- Valueの昇順で3つのグループにわけたグループ番号を割り振る ntile(@group) over (order By Value) as GroupNo from #Sequence; /* Value GroupNo ----------- -------------------- 11 1 12 1 13 1 14 1 15 2 16 2 17 2 18 3 19 3 20 3 */
4個・3個・3個のグループにわけることができました。総数がグループ数で割り切れない場合、NTILE関数は最初のグループから多く割り振っていきます。