📜  oracle rank() over (partition) - SQL (1)

📅  最后修改于: 2023-12-03 14:44:55.652000             🧑  作者: Mango

Oracle Rank() Over (Partition) - SQL

在Oracle数据库中,RANK()函数是通过排名给结果集进行编号的函数之一。该函数基于某些条件对结果集中的行进行排序,并对每行分配一个排名。 在 PARTITION BY 子句分割的分区内执行这个排序。

语法
RANK() OVER ([PARTITION BY partition_expression, … ] <order_by_clause>)

参数说明:

  • PARTITION BY:可选参数,将结果集中的行分成独立的分区,同时对每个分区进行排名,每个分区的排名从1开始。
  • order_by_clause:必选参数,用于定义排序的范围。
示例

假设有一个名为“employee” 的表,它包含以下几列:employee_id、employee_name、department_id 和 salary。现在我们想要计算每个部门中最高薪资的员工排名。那么可以执行以下代码:

SELECT employee_name, department_id, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank
FROM employee

注释:

  • 对于每个部门ID,此查询将按 salary 列按降序进行排序。
  • 每个分区的排名以 1 开始。
  • 每个分区中的员工根据薪资高低进行排名。
结果

执行上述SQL的结果将如下所示:

| employee_name | department_id | salary | rank | | --- | --- | --- | --- | | Tom | 1 | 5000 | 1 | | Jack | 1 | 4500 | 2 | | Mary | 2 | 6000 | 1 | | David | 2 | 5500 | 2 | | John | 3 | 4800 | 1 | | Peter | 3 | 4600 | 2 |

这里给出了每个部门的最高薪资员工的排名。通过上面的结果可以看出:

  • Tom 的排名位于部门 1 中的第一位。
  • Jack 的排名位于部门 1 中的第二位。
  • Mary 的排名位于部门 2 中的第一位。
  • David 的排名位于部门 2 中的第二位。
  • John 的排名位于部门 3 中的第一位。
  • Peter 的排名位于部门 3 中的第二位。

总之,使用 RANK()函数可以轻松地计算出部门中最高薪资员工的排名,并且十分灵活,可以根据不同的业务需求进行使用。