取数素养之窗口函数

分组统计 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 (组内排序字段) )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容