溫馨提示×

Oracle rank()與row_number()對比

小樊
183
2024-08-06 03:20:10
欄目: 云計(jì)算

在Oracle數(shù)據(jù)庫中,rank()和row_number()都是用于對查詢結(jié)果進(jìn)行排序的窗口函數(shù),但它們有一些區(qū)別。

  1. rank()函數(shù):rank()函數(shù)用于計(jì)算某個(gè)值在排序結(jié)果中的排名,如果有多個(gè)值相等,則會出現(xiàn)相同的排名。排名相同時(shí),下一個(gè)值的排名會跳過相同排名的數(shù)量。例如,如果有兩個(gè)值排名第一,則下一個(gè)值的排名將是第三名。

示例:

SELECT emp_name, salary, 
       RANK() OVER (ORDER BY salary DESC) AS salary_rank
  FROM employees;
  1. row_number()函數(shù):row_number()函數(shù)用于為排序結(jié)果中的每一行分配一個(gè)唯一的行號,不會跳過相同排名的行。即使有多個(gè)值相等,它們的行號也不會相同。

示例:

SELECT emp_name, salary, 
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
  FROM employees;

總的來說,rank()函數(shù)會出現(xiàn)相同排名,而row_number()函數(shù)會給每一行都分配唯一的行號。根據(jù)具體需求選擇合適的函數(shù)。

0