mysql实现分组排序top几、分组环比

一直以为mysql的分组排序支持很弱,今天才发现也是一样很强大的,在oracle上面能够使用的函数,在mysql这里也是能够得到支持的。

分类后再排序(可加序号):这个对于需要取每个分类的top几非常的好用
测试表 test:
在这里插入图片描述
: row_number() ,作用是生产连续的序号
: lead(n,m,z) ,n是你要环比的字段,m是环比的步长,z是在最后一条记录无法环比的时候,填充的填充值
代码样例:

select 
id_,
name1_, 
name2_,
row_number() over w as "在name1_下的排名", 
lead(name2_,1,0) over w as "相邻的上一条数据那name2_",
cnt_
from test
window w as (partition by name1_ order by cnt_ asc)

可以看到,分别在name1_下,都生成了各个分类的排名序号
在这里插入图片描述
将环比的值,提取到跟记录保持在一行,也可直接计算
在这里插入图片描述

对此类分组分区函数,mysql支持也是蛮强大的,曾经我开始也是很苦逼的把两张千万级别的etl调度执行记录日志相互关联查环比上次执行时间,结果导致一个sql要跑将近一个小时才能出来,后面通过官网找到了相关的lead()函数,使用了之后立马提升到20s+就执行完(当然,立马涉及到增量加工日志的就不细说),有兴趣的可以去mysq官网了解一下相关解说
官网参考链接:
https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值