一 、背景
一般在數據倉庫環境中,我們可以很方便的使用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函數的情況下使用
到此這篇關于MySQL中row_number的實現過程的文章就介紹到這了,更多相關MySQL中row_number內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MYSQL row_number()與over()函數用法詳解
- PostgreSQL ROW_NUMBER() OVER()的用法說明
- postgreSQL中的row_number() 與distinct用法說明
- postgresql rank() over, dense_rank(), row_number()用法區別
- SQL Server中row_number函數的常見用法示例詳解
- sql四大排名函數之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介紹
- sql ROW_NUMBER()與OVER()方法案例詳解