SQL как заказать по высшему разряду в группе, с общей группой
Набор данных взят из: документации по рангу / разделу Тима Холла Oracle-Base. Первоначально было назначено ранжирование окладов в отделе. Столбец 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 ответ
Вы можете поместить аналитические функции в order by
так что вы можете сделать:
order by max(sal) over (partition by deptno) desc,
deptno,
sal desc
Обратите внимание, что это имеет три ключа в order by
, deptno
необходимо, если в двух отделениях одинаковая самая высокая зарплата.