取数素养之窗口函数

2018-03-26  本文已影响0人  进击的yl

分组统计 top n 的需求

场景需求:需要找出每个品类下购买金额top 10的用户,而group by只对聚合的结果进行作用 返回一个结果值,这个时候就需要神奇的开窗函数了。

先上代码

select *
from
    (select product_category,user_id,t_amt,
            row_number() over (partition by product_category order by t_amt desc) rank
     from 
         (select product_category,user_id,sum(invest_amt) as t_amt
          from fact_biz_csyy_invest
          where invest_time>=date_add(now(),-7) group by 1,2 ) a ) b
where b.rank<=3

结果集

WechatIMG552.jpeg

这样就简单方便地得出了结果,那么窗口函数都怎么使用呢。

窗口函数的形式及用法

开窗函数与聚合函数(count()/ sum() 等)一样,也是对行集组进行聚合计算,但它不是每组只返回一个值。开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口

开窗函数的主要形式
排序函数+ OVER ( PARTITION BY (分组字段) ORDER BY (组内排序字段) )

上一篇 下一篇

猜你喜欢

热点阅读