使用 NTILE 將資料劃分為等分割槽的桶

假設你有多個考試的考試成績,並且你希望將每個考試分成四分位數。

-- Setup data:
declare @values table(Id int identity(1,1) primary key, [Value] float, ExamId int)
insert into @values ([Value], ExamId) values
(65, 1), (40, 1), (99, 1), (100, 1), (90, 1), -- Exam 1 Scores
(91, 2), (88, 2), (83, 2), (91, 2), (78, 2), (67, 2), (77, 2) -- Exam 2 Scores

-- Separate into four buckets per exam:
select ExamId, 
       ntile(4) over (partition by ExamId order by [Value] desc) as Quartile, 
       Value, Id 
from @values 
order by ExamId, Quartile

StackOverflow 文件

當真正需要一定數量的桶並且每個桶都填充到大致相同的水平時,ntile 效果很好。請注意,通過簡單地使用 ntile(100) 將這些分數分成百分位數是微不足道的。