我需要在presto中计算销售数据的十分位数,我正在使用下面提到的查询来获取它。
ceil((sum(sales) over(order by sales asc rows between unbounded preceding and current row )/sum(sales) over())*10) sales_c12_decile
我对这段代码面临的问题是,它抛出十分位数值 11 以获得最大销售价值。 这可能会影响较低销售值的十分位数。
有人可以告诉我我错过了什么吗? 提前谢谢。
我怀疑这是数值精度的问题。ceil()
逻辑应该是做你想做的事;但是您的问题表明存在数值精度问题。
一种解决方法是通过添加一个小偏移来调整计算:
ceil(sum(sales) over (order by sales asc rows) * 10.0 /
(sum(sales) over () + 0.0001)
) as sales_c12_decile
这应防止任何舍入问题影响十分位数。