Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Номер строки в группе без ROW_NUMBER()  [new]
AlexMath
Member

Откуда:
Сообщений: 2
Доброго времени суток!
Возникла проблема:
Есть задача: разбить таблицу employees на отделы, а затем в каждом отделе разбить на группы с одинаковой з/п. После чего дать номер группе зарплат в каждом отделе по убыванию зарплат. Т. е, если человек "А" в 54 отделе получает 100 рублей, человек "В" в том же отделе получает 200 рублей, человек "С" находится в 55 отделе и получает 1000 рублей, человек "D" получает 100 и находится в 54, то сначала нужно сгруппировать по отделам=> 2 группы из 54 и 55 отделов. А затем в каждом отделе выделить группы людей, получающих одинаковую зарплату. Тогда получится:
54 отдел.
1 группа
А, D
2 группа
В
55 отдел
1 группа
С

затем добавить ко всему этому столбец с номером этой группы. должно получиться что-то вроде этого: Картинка с другого сайта.

причем, люди с одинаковой з.п в одном отделе имеют один номер

Вот сам запрос:

SELECT LAST_NAME,H.DEPARTMENT_ID,H.SALARY,salary_rank
FROM EMPLOYEES E JOIN (SELECT DEPARTMENT_ID,SALARY, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT_ID ORDER BY salary desc) salary_rank
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID, SALARY) H ON E.DEPARTMENT_ID=H.DEPARTMENT_ID AND E.SALARY=H.SALARY
ORDER BY H.DEPARTMENT_ID, h.SALARY desc;


вопрос: как сделать без ROW_NUMBER()?
29 окт 14, 02:01    [16770437]     Ответить | Цитировать Сообщить модератору
 Re: Номер строки в группе без ROW_NUMBER()  [new]
Elic
Member

Откуда:
Сообщений: 29977
AlexMath
как сделать без ROW_NUMBER()?
Сортировка запроса без ORDER BY
29 окт 14, 06:58    [16770584]     Ответить | Цитировать Сообщить модератору
 Re: Номер строки в группе без ROW_NUMBER()  [new]
stax..
Guest
AlexMath

вопрос: как сделать без ROW_NUMBER()?

Вам нужно без аналитики, или без ROW_NUMBER()?
  1  select deptno,sal,
  2   dense_rank() over (order by deptno,sal desc) gr,
  3   ename
  4* from emp order by deptno,sal desc
SQL> /

    DEPTNO        SAL         GR ENAME
---------- ---------- ---------- ----------
        10       5000          1 KING
        10       2450          2 CLARK
        10       1300          3 MILLER
        20       3000          4 SCOTT
        20       3000          4 FORD
        20       2975          5 JONES
        20       1100          6 ADAMS
        20        800          7 SMITH
        30       2850          8 BLAKE
        30       1600          9 ALLEN
        30       1500         10 TURNER
        30       1250         11 MARTIN
        30       1250         11 WARD
        30        950         12 JAMES

14 rows selected.


......
stax
29 окт 14, 09:32    [16770971]     Ответить | Цитировать Сообщить модератору
 Re: Номер строки в группе без ROW_NUMBER()  [new]
AlexMath
Member

Откуда:
Сообщений: 2
Без аналитики
29 окт 14, 10:19    [16771240]     Ответить | Цитировать Сообщить модератору
 Re: Номер строки в группе без ROW_NUMBER()  [new]
stax..
Guest
AlexMath
Без аналитики

через гланды
  1  select e.deptno,e.sal,
  2  --   dense_rank() over (order by e.deptno,e.sal desc) gr,
  3     rn,
  4     ename
  5  from emp e,
  6  (select e1.*,rownum rn from (select unique deptno,sal from emp ee order by deptno,sal desc) e1) e2
  7  where
  8   e.deptno=e2.deptno and e.sal=e2.sal
  9*  order by e.deptno,e.sal desc
SQL> /

    DEPTNO        SAL         RN ENAME
---------- ---------- ---------- ----------
        10       5000          1 KING
        10       2450          2 CLARK
        10       1300          3 MILLER
        20       3000          4 SCOTT
        20       3000          4 FORD
        20       2975          5 JONES
        20       1100          6 ADAMS
        20        800          7 SMITH
        30       2850          8 BLAKE
        30       1600          9 ALLEN
        30       1500         10 TURNER
        30       1250         11 WARD
        30       1250         11 MARTIN
        30        950         12 JAMES

14 rows selected.


......
stax
29 окт 14, 10:38    [16771347]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить