【发布时间】:2019-05-21 01:00:03
【问题描述】:
数据集取自:Tim Hall's Oracle-Base rank/partition documentation 最初的任务是对部门内的薪水进行排名。 MYRANK 列是语法的,并用
引入RANK() OVER (PARTITION BY deptno ORDER BY sal) AS myrank
但现在我想按最高薪水排序,然后是同一部门内的所有记录。然后第二高的薪水再次紧随同部门的所有记录。部门的顺序是一种巧合,恰好与每个部门的最高薪水的顺序一致。
我想我可以用 rank() 代替 max() 来解决这个问题:
MAX() OVER (PARTITION BY DEPTNO ORDER BY SAL) AS MAX
而不是order by MAX, DEPTNO,但这失败了:invalid number of arguments
EMPNO DEPTNO SAL MYRANK
---------- ---------- ---------- ----------
7839 10 5000 3
7782 10 2450 2
7934 10 1300 1
7788 20 3000 4
7902 20 3000 4
7566 20 2975 3
7876 20 1100 2
7369 20 800 1
7698 30 2850 6
7499 30 1600 5
7844 30 1500 4
7654 30 1250 2
7521 30 1250 2
7900 30 950 1
【问题讨论】:
-
仅供参考:Tim Hall 的 Oracle-Base 站点是一个极好的资源,但它不是官方的 Oracle 文档集。
-
问题:如果总薪第一和第三高的人恰好属于同一个部门会怎样?
标签: sql oracle sorting partition-by