【发布时间】:2012-03-09 01:06:46
【问题描述】:
我有一个场景,我使用下面的 SQL Server NTILE 函数将多个结果分成四分位数。目标是在每个类中拥有相同数量的行
case NTILE(4) over (order by t2.TotalStd)
when 1 then 'A' when 2 then 'B' when 3 then 'C' else 'D' end as Class
结果表如下图所示,A、B、C、D 4个类组之间有(9,9,8,8)的分割。
有两个结果导致我出现问题,两行的总标准值相同,均为 30,但分配给不同的四分位数。
8 30 A
2 30 B
我想知道有没有办法确保将具有相同值的行分配给相同的四分位数?我可以按另一列分组或分区以获得这种行为吗?
Pos TotalStd class
1 16 A
2 23 A
3 21 A
4 29 A
5 25 A
6 26 A
7 28 A
8 30 A
9 29 A
1 31 B
2 30 B
3 32 B
4 32 B
5 34 B
6 32 B
7 34 B
8 32 B
9 33 B
1 36 C
2 35 C
3 35 C
4 35 C
5 40 C
6 38 C
7 41 C
8 43 C
1 43 D
2 48 D
3 45 D
4 47 D
5 44 D
6 48 D
7 46 D
8 57 D
【问题讨论】:
-
这就是
NTILE的工作方式,如果你所有的基地都有相同的TotalStd并且想要做四分位数会发生什么?无论如何它都会将值分成4个不同的组
标签: sql-server sql-server-2008