參考:
說明:關鍵在於@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
;
SQL分組排序
不得不承認,我腦子梗塞的很嚴重。表 gcc bloginfo blogid uid blogtitle createtime issketch checkright 1 1 hello 2010 04 01 2 1 2 1 hello2 2010 04 02 2 1 3 1 hello3 2010 ...
mysql分組排序
sql的分組排序是乙個難點,在leetcode中是乙個hard級別的題目。筆者這兩天在工作中遇到了這麼乙個需求。取過去一段時間範圍內銷量前500的商品,然後取每個商品裡面銷量最高的sku,一共500個sku。取銷量前500的商品好求,但是這500對應的最高的sku不太容易,需要用到分組排序。筆者在工...
MySQL分組排序
emp資料表建表語句 create table emp empno int,ename varchar 40 job varchar 40 mgr int,hiredate varchar 40 sal double,comm int,deptno int 插入資料準備 insert into em...