【发布时间】:2020-01-18 21:25:39
【问题描述】:
我有一张医院就诊表,包括 DoctorID、PacientID、Date.... 我确实喜欢这个,但我收到了一个错误。
SELECT
d.DoctorID, COUNT(v.DoctorID)
FROM Visits v
left join Doctors d on v.DoctorID=d.DoctorID
【问题讨论】:
标签: sql join select group-by count
我有一张医院就诊表,包括 DoctorID、PacientID、Date.... 我确实喜欢这个,但我收到了一个错误。
SELECT
d.DoctorID, COUNT(v.DoctorID)
FROM Visits v
left join Doctors d on v.DoctorID=d.DoctorID
【问题讨论】:
标签: sql join select group-by count
你关心错过group by:
SELECT d.DoctorID, COUNT(v.DoctorID)
FROM Doctors d LEFT JOIN
Visits v
ON v.DoctorID = d.DoctorID
GROUP BY d.DoctorID;
此外,您可能希望LEFT JOIN 以Doctors 开头,以便保留所有医生。
【讨论】:
您的查询缺少GROUP BY 子句。此外,我认为不需要JOIN。如果您想要每个doctorID 的(不同)patientsIDs 计数,您可以直接从visit 表中获取该信息,如下所示:
select doctorID, count(distinct patientID) from visits group by doctorID
或者,如果您还想看没有病人的医生:
select d.doctorID, count(distinct v.patientID)
from doctors d
left join visits v on v.doctorID = d.doctorID
group by d.doctorID
【讨论】:
您缺少GroupBy 子句。
所以你可以这样修复它
SELECT d.Name, COUNT(v.DoctorID) AS PantientCount
FROM Doctors d
LEFT JOIN Visits v ON d.DoctorId = v.DoctorId
GROUP BY d.Name
您也可以使用Conditional aggregation query with a group by,如下所示。
SELECT d.Name, SUM(CASE WHEN v.CustomerId IS NOT NULL THEN 1 ELSE 0 END) AS PantientCount
FROM Doctors d
LEFT JOIN Visits v ON d.DoctorId = v.DoctorId
GROUP BY d.Name
输出
【讨论】: