在Oracle中,RANK函數用于計算一個結果集中每個行的排名。它可以根據指定的列對結果集進行排序,并為每個行分配一個排名值。
RANK函數的語法如下:
RANK() OVER (PARTITION BY column1 ORDER BY column2)
其中,PARTITION BY用于指定分區列,可以將結果集分成多個分區并分別計算排名。ORDER BY用于指定排序列,根據此列對結果集進行排序。
下面是一個使用RANK函數的示例,假設有一個名為employees的表,包含員工姓名(name)和工資(salary)兩列:
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
此查詢將根據工資列對結果集進行降序排序,并為每個員工分配一個排名值。
如果要進一步對結果集進行分區,比如按照部門(department)進行分區,可以將PARTITION BY子句添加到RANK函數中:
SELECT name, department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees;
此查詢將根據工資列對每個部門內的員工進行降序排序,并為每個員工分配一個在其所在部門內的排名值。
請注意,RANK函數返回相同排名的行具有相同的排名值,并且在下一個不同的排名值之后跳過相同數量的排名值。例如,如果有兩個員工的工資相同,則它們將具有相同的排名值,并且在下一個不同的排名值之后跳過一個排名值。
RANK函數還有其他的一些選項和用法,可以根據具體需求進行靈活使用。