MySQL 序號函數:row_number() 、rank() 、 dense_rank()、ntile()

前言:以下函數都是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
  • 結果:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章