方法一:
為了實現row_number函式功能,此方法我們要使用到會話變數,下面的例項是從 employees 表中選出5名員工,併為每一行新增行號:
1
2
3
4
5
6
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
employees
LIMIT 5;
輸出結果:
在這個例項中:
首先,定義變數 @row_number ,並初始化為0;
然後,在查詢時我們為 @row_number 變數加1。
方法二:
這種方法仍然要用到變數,與上一種方法不同的是,我們把變數當做派生表,與主業務表關聯查詢實現row_number函式功能。下面我們仍然以查詢5位員工為例:
employees,(SELECT @row_number:=0) AS t
這樣的輸出結果與上一種結果是一致的。
需要注意的是,在這種方法中,派生表必須要有別名,否則執行時會出錯。
為每一組新增行號
瞭解ORACLE的朋友應該知道,row_number函式還有一個非常有用的功能就是分組排序 “over partition by” 。MySQL同樣可以實現這樣的功能,看下面的例項:
首先將payments表中按照客戶將記錄分組:
方法一:
為了實現row_number函式功能,此方法我們要使用到會話變數,下面的例項是從 employees 表中選出5名員工,併為每一行新增行號:
1
2
3
4
5
6
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
employees
LIMIT 5;
輸出結果:
在這個例項中:
首先,定義變數 @row_number ,並初始化為0;
然後,在查詢時我們為 @row_number 變數加1。
方法二:
這種方法仍然要用到變數,與上一種方法不同的是,我們把變數當做派生表,與主業務表關聯查詢實現row_number函式功能。下面我們仍然以查詢5位員工為例:
1
2
3
4
5
SELECT
(@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
employees,(SELECT @row_number:=0) AS t
LIMIT 5;
這樣的輸出結果與上一種結果是一致的。
需要注意的是,在這種方法中,派生表必須要有別名,否則執行時會出錯。
為每一組新增行號
瞭解ORACLE的朋友應該知道,row_number函式還有一個非常有用的功能就是分組排序 “over partition by” 。MySQL同樣可以實現這樣的功能,看下面的例項:
首先將payments表中按照客戶將記錄分組: