mysql - mysql分组排序

本文详细解析了MySQL中如何利用变量@rownum、@pdept和@pdept2来实现用户购买记录的排名。通过创建临时表并进行内联查询,结合IF条件语句更新变量@rank,实现按User_Id、Buyer_Fullname等字段升序排列,Sale_Date降序排列的排名功能。理解@pdept的赋值过程是掌握这一技巧的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

参考:https://www.cnblogs.com/john8169/p/9780471.html

说明:关键在于@pdept如何赋值。了解@pdept的赋值之后,立马就能明白rank(名次)的由来。

create table yida_sts.temp_hlq_user_sold_03 as  
select 
       User_Id
      ,Buyer_Fullname
      ,Buyer_Phone_Number
      ,Buyer_Email
      ,Sale_Date
      ,buy_times
      ,sum_price
      ,sku
      ,model
      ,rank 
from (  
       select b.*
            -- 行号
       	,@rownum:=@rownum+1     
            -- 处理排名,如果@pdept等于user_id,则表示@pdept被初始化,将@rank自增1
         ,if(@pdept=b.User_Id and @pdept2=b.Buyer_Fullname,@rank:=@rank+1,@rank:=1) as rank
         -- 初始化@pdept,@pdept为中间变量,在rank之后初始化,所以rank初始化时
         -- @pdept为null或者是上一user_id的值
           ,@pdept:=b.User_Id    
           ,@pdept2:=b.Buyer_Fullname
      from (  
          select a.*
          from temp_hlq_user_sold_02 a 
         order by user_id asc,Buyer_Fullname asc ,Buyer_Phone_Number asc,
         Buyer_Email asc,sale_date DESC  
          ) b 
       -- 初始化信息表
      ,(select @rownum :=0 , @pdept := null ,@pdept2 := null,@rank:=0) c 
     ) result  
;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值