1. 程式人生 > 資料庫 >MySQL中row_number的實現過程

MySQL中row_number的實現過程

一 、背景

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

mysql環境下實現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內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!