使用 inner join 输出每个部门的人员类型数

Output number of person types per department using inner join

我需要统计每个部门的医生、住院医师、护士和患者人数。但是,它不会产生任何结果。如果我删除 3 种类型,它会给我一个剩余人员类型的计数列表。如何在包含所有人员类型时显示结果?

谢谢。

`SELECT DISTINCT
    department.departmentID,
    COUNT(doctor.doctorID) AS number_of_doctors,
    COUNT(resident.residentID) AS number_of_residents,
    COUNT(nurse.nurseID) AS number_of_nurses,
    COUNT(patient.patientID) AS patient_count

FROM department
    INNER JOIN person ON department.departmentID = person.departmentID
    INNER JOIN doctor ON doctor.employeeID = person.personID
    INNER JOIN resident ON resident.employeeID = person.personID
    INNER JOIN nurse ON nurse.employeeID = person.personID
    INNER JOIN patient ON patient.patientID = person.personID
GROUP BY department.departmentID'

据推测,你不可能有一个人同时是医生、住院医师、护士和病人。所以使用 left joins :

SELECT
    de.departmentID,
    COUNT(do.doctorID  ) AS number_of_doctors,
    COUNT(re.residentID) AS number_of_residents,
    COUNT(nu.nurseID   ) AS number_of_nurses,
    COUNT(pa.patientID ) AS patient_count
FROM department de
INNER JOIN person   pe ON de.departmentID = pe.departmentID
LEFT  JOIN doctor   do ON do.employeeID   = pe.personID
LEFT  JOIN resident re ON re.employeeID   = pe.personID
LEFT  JOIN nurse    nu ON nu.employeeID   = pe.personID
LEFT  JOIN patient  pa ON pa.patientID    = pe.personID
GROUP BY de.departmentID