mysql实现分组排名
在oracle中,可以使用row_number() over(partition by ... order by ...)
的方法实现分组排名,在mysql
中并不提供类似方法,但也可以实现这样的功能
实例演示:
实例1:实现分组排名-单字段
# mysql实现分组排名-单字段
select
t.member_id,# 分组字段
t.order_date,# 排名字段
# 排名计算逻辑
case
when @num = t.member_id then @rank:=@rank+1
else @rank:=1
end rownum,
# 分组字段临时参数的设置一定要放到排名计算逻辑后面
@num:=t.member_id
from
# 这个r表是必须要的,先做变量初始化,否则第一次查询的时候会有问题
(select @rank:=0,@num:=0 from dual) r,
bi_t_pro_z_achievement_detail t
order by
t.member_id,# 分组字段
t.order_date # 排名字段
上述实例中,我的主表是bi_t_pro_z_achievement_detail
,实现了根据member_id
进行分组,然后根据order_date
从小到大排名
实例2:实现分组排名-多字段
# mysql实现分组排