MySQL中row_number行號實現


row_number函數函數是對分組之后的數據進行組內編號,效果如下:

由於新增了一列num,結合組內的排序,可以很方便的選取組內特定的數據。

實現步驟

--1.實現給每一行添加一個序號
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS num, s.id, s.name, s.age
FROM
student s;

這里利用用戶變量實現數據自增

--2.分組編號

SET @row_number=0, @customer_no=0;

SELECT
@row_number:=CASE
WHEN @customer_no = s.age THEN @row_number + 1
ELSE 1
END AS num,
@customer_no:=s.age AS stu_age,
s.id,
s.name
FROM
student s
ORDER BY
s.age;

customer_no是一個臨時變量,每次查詢都被賦值為age。而case中判斷條件在customer_no賦值之前,其實就是判斷當前行age值是否與上一行age值相同。當不相同時重新編號(輸出1),從而實現了分組順序編號的功能。效果與oracle中的row_number函數相同。

--3.用戶變量賦值
可以使用另一種方式替代用戶變量的賦值
SELECT
@row_number:=CASE
WHEN @customer_no = s.age THEN @row_number + 1
ELSE 1
END AS num,
@customer_no:=s.age AS stu_age,
s.id,
s.name
FROM
student s, (SELECT @row_number:=0, @customer_no:=0) AS t
ORDER BY
s.age;
這里將賦值放入select語句內部,效果一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM