数据集来自: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
答案 0 :(得分:2)
您可以将分析函数放在order by
中,因此您可以这样做:
order by max(sal) over (partition by deptno) desc,
deptno,
sal desc
请注意,它在order by
中具有三个键。如果两个部门的最高工资相同,则需要deptno
。