【问题标题】:SQL how to order on highest rank in group, with total groupSQL如何在组中排名最高,总组
【发布时间】: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


【解决方案1】:

你可以把解析函数放在order by,这样你就可以:

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

请注意,order by 中有三个键。如果两个部门的最高薪水相同,则需要deptno

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2018-01-17
    • 2020-11-21
    • 2023-03-03
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多