`RANK()` 是 Oracle 數(shù)據(jù)庫(kù)中的一個(gè)窗口函數(shù),用于給查詢結(jié)果集中的行賦予排名。它的作用是根據(jù)指定的排序條件對(duì)每行進(jìn)行排名,并為每個(gè)行指定一個(gè)唯一的排名值。
具體來(lái)說(shuō),`RANK()` 函數(shù)會(huì)根據(jù) ORDER BY 子句中指定的列對(duì)結(jié)果集進(jìn)行排序,并根據(jù)排序結(jié)果為每一行分配一個(gè)排名值。如果存在相同的排序值,則會(huì)出現(xiàn)并列排名。排名值是連續(xù)整數(shù),不會(huì)有間隔。
以下是 `RANK()` 函數(shù)的一般語(yǔ)法:
```sql
RANK() OVER (PARTITION BY expr1, expr2,... ORDER BY col1, col2,...)
```
- `PARTITION BY` 子句可選,用于將結(jié)果集劃分為多個(gè)分區(qū),每個(gè)分區(qū)內(nèi)獨(dú)立計(jì)算排名。
- `ORDER BY` 子句是必需的,用于指定排序順序和列。
- `RANK()` 函數(shù)返回結(jié)果集中每行的排名值。
舉例說(shuō)明:
假設(shè)有如下員工表 `employees`:
| employee_id | employee_name | salary |
|-------------|---------------|--------|
| 1 | Alice | 5000 |
| 2 | Bob | 6000 |
| 3 | Carol | 5500 |
要查詢員工表中員工的薪資排名,可以使用以下 SQL 查詢語(yǔ)句:
```sql
SELECT employee_id, employee_name, salary, RANK() OVER (ORDER BY salary DESC) as salary_rank
FROM employees;
```
上述查詢會(huì)按照薪資從高到低對(duì)員工進(jìn)行排名,并在結(jié)果集中添加一個(gè)名為 `salary_rank` 的列,顯示每個(gè)員工的薪資排名。