我正在尝试编写一个查询,该查询按月对所有其他客户按十分位数进行排名。
我尝试过:
ntile(10) over (partition by rec_month order by engagement_rate) as decile
但是我不认为这能帮到我所需的东西。似乎只是将虚拟主机分成10个大小相等的组。我想要百分位。
我也尝试过:
ntile(10) over (partition by rec_month, vhost order by engagement_rate) as decile
但是那只是在一个月内在客户(vhost)中进行计算。
我如何计算一个月内所有其他客户(虚拟主机)的投入率十分位数?
[起初,我怀疑您是排名函数,例如DENSE_RANK或RANK(稀疏,我要使用on),然后将其除以count(*),然后将其截断为百分比用(trunc(V/10)*10)
来简化,但是我怀疑您可能想要PERCENT_RANK函数的输出,但是雪花文档示例并不像我希望的那样澄清,知道它可以解决您的问题。
select column1,
column2,
round(percent_rank() over (order by column2),3) as p_rank,
trunc(p_rank*10)*10 as decile
from values ('a',1),('b',2),('c',3),('d',4),('e',5),('f',6),('g',7);
给予
COLUMN1 COLUMN2 P_RANK DECILE
a 1 0 0
b 2 0.167 10
c 3 0.333 30
d 4 0.5 50
e 5 0.667 60
f 6 0.833 80
g 7 1 100
但是您可能想使用ntile而不是截断百分比。回合正是为了使上面的答案不再那么冗长。