Напишите запрос, чтобы показать идентификатор, имя и номер отдела? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь написать запрос, чтобы показать идентификатор, имя и номер отдела в данной таблице, которые ссылаются на более чем один отдел.

ID      Name     Department
--      ----     ----------
1       Sam      HR
1       Sam      FINANCE
2       Ron      PAYROLL
3       Kia      HR
3       Kia      IT

Результат:

ID      Name     Department
--      ----     ----------
1       Sam               2
3       Kia               2

Я пытался использовать group by id и count(*), но запрос выдает ошибку.

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Вы были правы насчет использования count().Вам нужно сгруппировать по другим столбцам и только подсчитывать уникальные отделы, а затем фильтровать по числу в предложении «иметь».

select id, name, count(distinct department) as no_of_department
from table
group by id, name
having count(distinct department) > 1

Это также можно сделать с помощью аналитических функций, подобных приведенным ниже:

select *
from (
  select id, name, count(distinct department) over (partition by id, name) as no_of_department
  from table
) t
where no_of_department > 1
0 голосов
/ 12 июня 2018

Не видя вашего запроса, можно предположить, что вы неправильно написали предложение GROUP BY (если вы его использовали) и забыли включить предложение HAVING.

В любом случае, что-то вроде этого может бытьчто вы ищете:

SQL> with test (id, name, department) as
  2    (select 1, 'sam', 'hr'      from dual union
  3     select 1, 'sam', 'finance' from dual union
  4     select 2, 'ron', 'payroll' from dual union
  5     select 3, 'kia', 'hr'      from dual union
  6     select 3, 'kia', 'it'      from dual
  7    )
  8  select id, name, count(*)
  9  from test
 10  group by id, name
 11  having count(*) > 1
 12  order by id;

        ID NAM   COUNT(*)
---------- --- ----------
         1 sam          2
         3 kia          2

SQL>
0 голосов
/ 12 июня 2018

Вы можете использовать window функцию с subquery:

select distinct id, name, Noofdepartment
from (select t.*, count(*) over (partition by id,name) Noofdepartment
      from table t
     ) t
where Noofdepartment > 1;

Однако вы также можете использовать group by предложение:

select id, name, count(*) as Noofdepartment
from table t
group by id, name
having count(*) > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...