Mysql中的分组排序
Mysql8中已经有了和oracle一样的窗口函数,项目中用的5.7
初始数据:
目的,现在只想取user_id最大的一条
select t.*,if(@g=t.user_type,@rank:=@rank+1,@rank:=1) as rank,
@g:=t.user_type as 'group'
from
(SELECT t.user_id,t.fullname,t.user_type
FROM t_user t
order by t.user_type,t.user_id desc)t,
(select @rank:=0,@g:=null) t2
where if(@g=t.user_type,@rank:=@rank+1,@rank:=1) =1
其中的原因就是投影原因,先给t_user表按照2个字段排序,并给2个变量赋值,当第一条数据过来的时候,@g为null,不等于User_type,使用@rank为1,如果下一条数据和user_type一样,则rank+1。