I am new to MySQL and Have following question.
Let’s say I have two following tables
Departments
x
DepartmentId Name
Employees
ID DepartmentId Name
I have written following query which is returning half of my expected result
select
d.name as departmentName,
count(*) as totalEmployees
from
employees e
join department d
on d.departmentId = e.departmentId
group by
d.departmentId,
d.name
which returns the result with number of employees in each department. but I want to have following two cases in my query.
1. Some departments don't have employees
2. Some departments have the same name
I have tried my query with NOT EXISTS and NOT IN but could not get expected result. Could anyone please help me here to cover above two cases in MySQL query.
Advertisement
Answer
I think you just need left join
:
select d.departmentId, d.name as departmentName,
count(e.departmentid) as totalEmployees
from department d left join
employees e
on d.departmentId = e.departmentId
group by d.departmentId, d.name;
Including the department id distinguishes among departments with the same name.
If you want all departments with the same name to be combined, then remove departmentid
from the select
and group by
:
select d.name as departmentName,
count(e.departmentid) as totalEmployees
from department d left join
employees e
on d.departmentId = e.departmentId
group by d.name;