Mysql 分组排序取组内前几条

mysql8.0开始支持 row_number() over(partition by 分组列 order by 排序列 desc) 这种窗口函数,早期版本不支持,所以要实现分组排序只能自己写逻辑来实现。

-- 1. @xx 设置变量
-- 2. :=  给变量赋值
-- 假设需要对gc进行分组,然后在每个组内对oc进行降序排序

-- 1. 窗口函数处理
select t.*, row_number() over(partition by gc order by oc desc) As rank 
from table_name t
;

-- 2. 变量方式实现
select 
if(@gc = a.gc and @gc1 = a.gc1, @curRank := @curRank + 1, @curRank := 1) AS row_cnt,
-- 注意这个计数项需要放在变量设置之前,这样第一次变量和实际dt、stu值不匹配,第一行的行序号会做成1,第二行开始匹配上了就自增了
@gc := a.gc, 
@gc1 := a.gc1, 
-- 这里分组字段挨个设置
oc 
from (select gc, gc1, oc from table_name order by gc, gc1, oc desc) a, 
(select @gc := null, @gc1 := null, @curRank := 0) temp
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值