【和sql对比】针对累计值过滤 | 润乾 -欧洲杯在线开户

找出销售额占到一半的前n个客户,并按销售额从大到小排序

sql解法

with a as
      (select 客户,销售额,row_number() over (order by 销售额) 排名
       from 客户销售表)
select 客户,销售额
from (select 客户,销售额,sum(销售额) over (order by 排名) 累计额
      from a)
where 累计额>(select sum(销售额)/2 from 客户销售表)
order by 销售额 desc

这里事实上是销售额从小到大的累计值,反过来找出不在后一半客户的客户,否则很难处理恰好要过线的那个客户,这样会导致进行两次方向不同的排序。而且由于窗口函数在计算累计值时对销售额相同值的处理问题,需要再做子查询先计算排名。

spl解法

a
1 =demo.query(“select * from 客户销售表”).sort(销售额:-1)
2 =a1.cumulate(销售额) 计算累计序列
3 =a2.m(-1)/2 最后的累计值即是总和
4 =a2.pselect(~>=a3) 超过一半的位置
5 =a1(to(a4))

使用spl则只要按常规理解的过程查找。

网站地图