【发布时间】:2018-01-25 13:03:19
【问题描述】:
我没有看到我正在寻找的确切答案。我有一个带有 ID 和两个值的表。我需要将第一个值列从低到高排序,然后根据每个十分位数具有相等(或几乎相等)的总值 2 对列表进行十分位数。这是一个使用四分位数考虑空间的示例:
我有:
ID value1 value2
1 2 132
2 6 182
3 5 195
4 8 152
5 3 132
6 9 129
7 3 180
8 9 120
9 3 172
10 6 192
11 9 177
12 12 151
每个四分位数应约为 478.5
按 value1 排序得到这个,但我需要能够分配我的四分位数,每个四分位数约为 478.5。我手动输入了样本四分位数,根据计算可能正确也可能不正确
ID value1 value2 Qtle
1 2 132 1
5 3 132 1
7 3 180 1
9 3 172 2
3 5 195 2
2 6 182 3
10 6 192 3
4 8 152 3
6 9 129 4
8 9 120 4
11 9 177 4
12 12 151 4
抱歉格式问题 - 第一篇文章。
编辑 1 - 我想我可能已经解决了,虽然它可能没有它应该的那么优雅
编辑 2 - 在上面添加了示例四分位数并修复了下面的代码以反映四分位数而不是十分位数。还修复了 value2 的总和
SELECT value1
,value2
,SUM(value2) OVER (ORDER BY value1 ) CumSum
,CASE
WHEN SUM(value2) OVER (ORDER BY value1 ) < (Select sum(value2) from table1)/4 Then 1
WHEN SUM(value2) OVER (ORDER BY value1 ) < 2 * (Select sum(value2) from
table1)/4 Then 2
WHEN SUM(value2) OVER (ORDER BY value1 ) < 3 * (Select sum(value2) from
table1)/4 Then 3
Else 4
End as Quartile
FROM Table1
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
-
T-SQL ...够了
-
@Black.Jack 是的,但它应该在标签中。
-
你从哪里得到 396.5 的值?你能指定一个预期的输出吗?
-
对不起,396.5 是 value2 除以 4 的总和。