一 、背景
一般在資料倉庫環境中,我們可以很方便的使用row_number函式根據某個維度來對資料進行分組,實作每個組內資料編號排序的效果,如下圖所示,該圖是在mysql環境中生成的效果圖,這里以lcid進行的分組,num等價于row_number函式實作的效果:

二、實作程序
1.設定mysql變數
設定兩個變數
set @row_number:=0; --根據lcid_no的判斷結果生成row_number序號
set @lcid_no:= 0; --用于獲取每行lcid列資料,然后與前面一行的lcid資料進行對比,若相同則自增1,否則為1
2.使用case when
SELECT @row_number:=CASE
WHEN @lcid_no = s.lcid THEN @row_number + 1
ELSE 1
END AS num,
@lcid_no:=s.lcid AS lcid,
s.lcid
FROM r_qcloud_approval_fh_d s,(select @orw_number:=0,@lcid_no:=0) t
ORDER BY s.lcid;
3.程序分析
若存在多條相同資料情形
1)初始條件下,游標指向第一條資料,此時lcid_no = 0,lcid_no 不等于lcid,故row_number = 1
2)游標指向第二條資料,lcid_no = 上一條資料的lcid,因上一條資料的lcid = 當前行lcid,因此row_number =2
無重復資料情形
1)初始條件下,游標指向第一條資料,此時lcid_no = 0,lcid_no 不等于lcid,故row_number = 1
三、使用場景
在mysql這種關系型資料庫中,沒有row_number函式的情況下使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/171747.html
標籤:其他
上一篇:Day23SSM之事務***
