最近遇到一个问题,就是如何计算目标用户在整体用户中的位置。比如消费、在线时长等指标。
就好像是电脑开机时,给大家的提示,恭喜你!超过了全国98%的用户。
想了好久,最后发现还是得用窗口函数。
其实思路是很简单的,首先要先确定算法是什么样的。既然是超过了多少的用户,那么和排名多少肯定是有区别的。
本身的排名很好实现,就是开窗函数,rank()over()
超过的含义是不含自己,比自己排名低的人。所以方法是:(排名-1)/(总数-1)
最后的语句如图。比例算出来的是小数,需要变为百分数,方法就是*100再加上%。
然后排名就用rank(),总数就用count(1),留给大家一个思考,为什么是rank而不是dense_rank呢?
这里面我有加入Partition参数,来按年度排名计算。也就是计算出来的排名都是本年的,当然这个维度可以变换,每个月每周都可以。这样就能有限的筛选出头部的用户。