SQL如何在组中以最高组排序

时间:2018-12-20 13:37:09

标签: sql oracle sorting partition-by

数据集来自: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

1 个答案:

答案 0 :(得分:2)

您可以将分析函数放在order by中,因此您可以这样做:

order by max(sal) over (partition by deptno) desc,
         deptno,
         sal desc

请注意,它在order by中具有三个键。如果两个部门的最高工资相同,则需要deptno