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赋值给了agent
from 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);
妈呀,终于凑够字数了,欧拉!!!