SQL 如何对组中的最高排名排序,总组
SQL how to order on highest rank in group, with total group
数据集取自: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
你可以把解析函数放在order by
里,这样你就可以:
order by max(sal) over (partition by deptno) desc,
deptno,
sal desc
请注意,order by
中有三个键。如果两个部门的最高薪水相同,则需要deptno
。
数据集取自: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
你可以把解析函数放在order by
里,这样你就可以:
order by max(sal) over (partition by deptno) desc,
deptno,
sal desc
请注意,order by
中有三个键。如果两个部门的最高薪水相同,则需要deptno
。