Sql 基于值而非计数的ntile函数
我想得到5个百分位数,基于一列被分成5等分的总和(百分位数中的人数不应该相同) 我试着运行ntile函数,但它根据计数得到了ntileSql 基于值而非计数的ntile函数,sql,oracle,Sql,Oracle,我想得到5个百分位数,基于一列被分成5等分的总和(百分位数中的人数不应该相同) 我试着运行ntile函数,但它根据计数得到了ntile select name, data_usg, NTILE(10) OVER(ORDER BY data_usg asc) AS Quartile_data from dev_TECH_KPIS 我的桌子看起来像这样 Name Data_usg A 100 B 150 C 200 D 13
select name, data_usg,
NTILE(10) OVER(ORDER BY data_usg asc) AS Quartile_data
from
dev_TECH_KPIS
我的桌子看起来像这样
Name Data_usg
A 100
B 150
C 200
D 130
E 80
F 50
G 60
H 15
I 80
J 90
K 50
L 60
M 30
M 20
最终的结果是将名称分配到队列中,每个队列的总数据使用量为1115/5=223。这类事情有窗口函数。例如
百分位函数()。但是,我更喜欢手动进行计算:
select dtk.*,
floor(running_data_usg / (total_data_usg + 1)) as quintile
from (select dtk.*, sum(data_usg) over () as total_data_usg,
sum(data_usg) over (order by data_usg asc) as running_data_usg
from dev_TECH_KPIS dtk
) dtk;
我发现手动计算几乎和使用单个函数(两个函数而不是一个函数)一样简单。但它在处理关系方面提供了更多的控制,并对百分位数的定义进行了调整