分析函数之窗口函数

 

分析函数之窗口函数  

 

当统计量随着当前记录变化时,就需要用到窗口函数了

特殊情况: select sum (c1) over() from  加的所有的和;

          select  sum(c1) over(order by c2) from  与

          over ( ORDER BY site_id ROWS BETWEEN UNBOUNDED PRECEDING  AND UNBOUNDED FOLLOWING)  相同

一、对行数规则的结果集,窗口仅涉及行数的移动

1、几种情况

     SUM((cnt)) over(ORDER BY site_id

      rows BETWEEN UNBOUNDED preceding AND UNBOUNDED following) AS total

      行      范围 为                 无限向前                                无限向后

      rows BETWEEN  1  preceding AND  n  following) AS total

      行        范围为           当前行前一行,当前行后n 行

       rows BETWEEN   0  preceding AND  0  following) AS total

       行        范围为         只统计当前行

        rows BETWEEN   1  preceding AND  current row) AS total

         行        范围为            当前行前一行和本行

2、例子

       insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (1, 10);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (2, 4);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (3, 2);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (4, 2);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (5, 4);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (6, 19);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (7, 4);

insert into test2 (SITE_ID, SALE_LOTTERY_CNT)
values (8, 19);

a、计算每个销售点销量占所有销量的比例
SELECT site_id,SUM(sale_lottery_cnt), 100*SUM(sale_lottery_cnt)/
       SUM(SUM(sale_lottery_cnt)) over(ORDER BY site_id rows BETWEEN UNBOUNDED preceding AND UNBOUNDED following)||'%' AS Percent_
  FROM test2
 GROUP BY site_id;

1 10 15.625%
2 4 6.25%
3 2 3.125%
4 2 3.125%
5 4 6.25%
6 19 29.6875%
7 4 6.25%
8 19 29.6875%

b、按销售点id排列,计算每个销售点销量、小于等于此销售点号的总销量

SELECT site_id,SUM(sale_lottery_cnt),
       SUM(SUM(sale_lottery_cnt)) over(ORDER BY site_id rows BETWEEN UNBOUNDED preceding AND 0 following) AS total
  FROM test2
 GROUP BY site_id; 

1 10 10
2 4 14
3 2 16
4 2 18
5 4 22
6 19 41
7 4 45
8 19 64

二、对行数不规则的结果集,窗口也可根据日期移动

 比如求5日内的平均值

 avg(c1) over( over by trunc(c2_day) range  between   interval '2' day preceding  and  interval '2' day following)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值