前言:以下函數都是MySQL8.0版本才支持,使用前請確認當前MySQL版本,詳情可百度MySQL8.0新特性-窗口函數-序列函數
1.測試表內容
- MySQL版本:8.0.11
- 示例:
2.row_number()函數
- 作用:對查詢的數據進行排序(顯示每條數據的行號);
- 示例:
SELECT
ROW_NUMBER () OVER (
ORDER BY person.`salary` DESC) num,
person.salary
FROM
person
- 結果:
3.rank()函數
- 作用:對查詢數據進行排序,值相同的排序後序號也會相同,注意rank()函數排序序號是不連續的;
- 示例:
SELECT
RANK () OVER (
ORDER BY person.`salary` DESC) num,
person.salary
FROM
person
- 結果(注意看num序號是不連續的):
4.dense_rank()函數
- 作用:對查詢數據進行排序,值相同的排序後序號也會相同,注意dense_rank()函數排序序號是連續的,這也是與rank()函數的區別 ;
- 示例:
SELECT
DENSE_RANK () OVER (
ORDER BY person.`salary` DESC) num,
person.salary
FROM
person
- 結果:
5.ntile(group_num)函數
- 作用:將查詢數據分成group_num數目的組數,ntile(1)就是將查詢數據分成一組,ntile(2)就是將查詢數據分成二組,以此類推;
- 示例:
SELECT NTILE (1) OVER ( ORDER BY person.`salary` DESC) num,person.salary FROM person
SELECT NTILE (2) OVER ( ORDER BY person.`salary` DESC) num,person.salary FROM person
SELECT NTILE (3) OVER ( ORDER BY person.`salary` DESC) num,person.salary FROM person
- 結果: