Выберите группу по отделу - PullRequest
0 голосов
/ 12 марта 2019

У меня есть данные, как показано ниже. Я хочу выбрать те Emp_id, где только HR является единственным DEPT присутствующим. Из приведенного ниже следует выбирать только 100994 и 100998 .

**EMP_ID    DEPT**
100017  FIN
100017  HR
100017  ADMIN
100994  HR
100997  ADMIN
100997  FIN
100998  HR
100999  FIN

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вот один из вариантов:

SQL> with test (emp_id, dept) as
  2    (select 100017, 'FIN'   from dual union all
  3     select 100017, 'HR'    from dual union all
  4     select 100017, 'ADMIN' from dual union all
  5     select 100994, 'HR'    from dual union all
  6     select 100997, 'ADMIN' from dual union all
  7     select 100997, 'FIN'   from dual union all
  8     select 100998, 'HR'    from dual union all
  9     select 100999, 'FIN'   from dual
 10    )
 11  select emp_id
 12  from test
 13  group by emp_id
 14  having min(dept) = max(dept)
 15     and min(dept) = 'HR';

    EMP_ID
----------
    100998
    100994

SQL>
0 голосов
/ 12 марта 2019

Я бы рекомендовал использовать подзапрос для подсчета записей.Если количество записей для определенного идентификатора больше 1, пропустите идентификатор.

SELECT `emp_id`, `dept` FROM (
    SELECT SUM(1) AS `count`, `emp_id`, `dept`
    FROM `table1`
    GROUP BY `emp_id`
) AS `derived`
WHERE `count` = 1 AND `dept` = 'HR'
...