SQL как заказать по высшему разряду в группе, с общей группой - PullRequest
0 голосов
/ 20 декабря 2018

набор данных взят из: Документация ранга / раздела Тима Холла по Oracle / Base Первоначальным заданием было ранжирование окладов в отделе.Столбец MYRANK является синтаксическим и представлен как

RANK() OVER (PARTITION BY deptno ORDER BY sal) AS myrank

Но теперь я хочу отсортировать по самой высокой зарплате, за которой следуют все записи в одном отделе.Затем снова последовала вторая по величине зарплата со всеми записями в том же отделе.Порядок dept является своего рода совпадением, он совпадает с порядком наивысшей зарплаты в каждом отделении.

Я думаю, что могу решить это, когда 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 голосов
/ 20 декабря 2018

Вы можете поместить аналитические функции в order by, так что вы можете сделать:

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

Обратите внимание, что в order by есть три клавиши.deptno требуется, если два департамента имеют одинаковую самую высокую зарплату.

...