淘宝案例 行为转化分析,分组取出的表中上一行下一行比值,上一行用开窗函数lag() over()
-- 2.行为转化分析(转化率=当前行为人数/上一行为人数)
select
behavior_type,
count(distinct user_id) as 用户人数,
lag(count(distinct user_id),1) over(order by if(behavior_type='pv',1,if(behavior_type='fav',2,if(behavior_type='cart',3,4)))) as 上一行为用户人数,
ifnull(count(distinct user_id)/lag(count(distinct user_id),1) over(order by if(behavior_type='pv',1,if(behavior_type='fav',2,if(behavior_type='cart',3,4)))),1) as 转化率
from userbehavior_new
group by behavior_type;
需要注意的是,要用取出的表中上一行除下一行,要用开窗函数lag,而且要做出序号,可以跟if判断相结合使用,可以认为地给定合适的序号。
另外,group by 后产生聚合运算,select中 的开窗函数的执行是排在后边的,
是基于group by已取得表的基础上使用的,所以表现不出窗口函数应呈现的效果。但是针对这个字段来讲数据只是被隐藏了,在分区表里会单列一列呈现多行。








暂无数据