vlambda博客
学习文章列表

mysql的排名计数问题

嘿嘿,本来一直用hive,也没考虑过需要用mysql出些排名数据,无独有偶,那天就是赶巧了,hive没有表数据,除了mysql本地库有存储数据,别无他法下,硬算了一波数据,mysql+excel也是费劲到不行,然后这两天有点时间,就自己又开始研究了起来,找个简便点的方式方法,用set @ a=0,初始化一个变量更方便的计算了。


代码不长,也很好理解;

select called_no as called,date(ring) as call_time,hour(ring) hours,@rnk:=if(@pre=called_no,if(@agent=agent,@rnk+1,1),1) as rnks, -- 对重复出现的电话和agent累计计数@pre:=called_no as pres,-- 赋值电话@agent:=agent as pre_agent-- 将前一个agent赋值给了agentfrom ermasdb.data_xiao_a_manual_call,(select @pre:=null,@rnk :=0,@agent:=null ) init-- 初始化3个变量where dir=1 and device_type=2 and substr(ring,1,10)='2020-05-07' order by called_no,HOUR(ring)-- 切记一定要留个分组,要不然会乱套的

嘿嘿,这个不难了吧,其实如果支持hive的话,直接使用窗口函数会更快速,不考虑重复计数: row_number()over(partition by A order by B desc) ;考虑重复计数,总数不变,后延:rank()over(partition by A order by B desc);

考虑重复,总数可能减少:density()over(partition by A order by B desc);


妈呀,终于凑够字数了,欧拉!!!