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