要获得至少出现一次在appointments
表doctor_id
值的列表,在appointments
表中出现的具有doctor_id的行数可以使用类似的查询:
SELECT a.doctor_id AS doctor_id
, SUM(1) AS count_appointments
FROM appointments a
GROUP BY a.doctor_id
的关键在于得到的结果是增加了GROUP BY doctor_id
条款,从而有效地瓦解所有行为doctor_id
给定的值转换成单排的,所以我们回来doctor_id的不同列表。
聚合函数SUM(1)
基本上返回1的每一行文字值,然后从各行具有相同的doctor_id加起来所有的这些值,有效地让我们与doctor_id
行数的计数。
注意:你也可以使用一个替代SUM(1)
COUNT(1)
或COUNT(*)
,这些将返回相同的结果。您可以使用COUNT(expr)
,其中expr
是任何表达式,对于要包含在“count”中的每一行,其值都是非NULL值。
要还回doctor_id具有零个约会,我们会使用doctors
表作为外部驱动表连接的操作(假设doctor_id是医生表是唯一的。)
像这样的东西:
SELECT d.doctor_id AS doctor_id
, COUNT(a.doctor_id) AS count_appointments
FROM doctors d
LEFT
JOIN appointments a
ON a.doctor_id = d.doctor_id
GROUP BY d.doctor_id
同样,GROUP BY
折叠所有具有对doctor_id
相同的值成一个单一的行中的行,并且所述COUNT()聚合所述组操作。我们在COUNT()函数中使用的表达式对于约会表中的每个匹配行都必须是非空的表达式,对于没有匹配行的医生的行是NULL。
首先,您需要修复您的[加入语法](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins .aspx)。 1992年很久以前。 – Zane