Можно ли получить общее количество сотрудников и сотрудников в каждом отделе в одном запросе? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть таблица, называемая сотрудником, как показано ниже:

emp      dept
----     ----
1         HR
2         Accounts
3         HR
4         Dev
2         Dev

Сотрудник может принадлежать к нескольким отделам, например, в случае сотрудника 2.

Я хочу вывод, подобный этому:

dept    empInDept   totalCountofEmp
 -----    ---------   ----------------
    HR       2            4
    Accounts 1            4

Я могу получить количество сотрудников в указанных отделах, как показано ниже:

select dept,count(*) as empInDept from employees where dept ='HR' or dept='Accounts' group by dept

Но я не уверен, возможно ли создать одиночный запрос, в котором можно получить результат вышеупомянутого select запроса, а также получить общее различное количество сотрудников из этой таблицы.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вот пример вашего запроса:

create table #temp
(id int, value int)

insert into #temp values (1,2),(2,3),(1,5)

select id, count(Value), (select count(distinct value) from #temp) as X
from #temp
group by id

Для вашей конкретной задачи, пожалуйста, попробуйте следующее:

select dept,
       count(*) as empInDept 
       (select count(distinct emp) from employees) as TotalCount
from employees where dept ='HR' or dept='Accounts' 
group by dept
0 голосов
/ 15 ноября 2018

Вы можете использовать стандарт ANSI / ISO rollup или grouping sets:

select dept, count(distinct emp)
from employees
where dept in ('HR', 'Accounts')
group by grouping sets (dept, ());

Дополнительные базы данных поддерживают rollup, но синтаксис может отличаться. Один из методов:

select dept, count(distinct emp)
from employees
where dept in ('HR', 'Accounts')
group by rollup(dept);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...