1. 程式人生 > 其它 >MySQL中row_number行號實現

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語句內部,效果一樣。