如何查询表以使用SQL提供ID的实例数?

时间:2014-03-31 18:08:40

标签: mysql sql

我有两张桌子医生和预约。我需要制作一份医生ID列表,其中包含为每位医生预约的一次或多次预约。

到目前为止,我有但我无法弄清楚如何让它做我想做的事情:

SELECT 
    doctor.doctor_id, 
    appointment.doctor_id 
FROM doctor, 
    appointment 
WHERE doctor.doctor_id =     appointment.doctor_id;

SELECT 
    COUNT(DISTINCT doctor_id) AS NumberOfAppointments 
FROM appointment 
where doctor_id="50";

任何帮助都将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:2)

JOIN两个表和使用GROUP BY

SELECT doctor.doctor_id,
       appointment.doctor_id,
       COUNT(doctor_id) AS NumberOfAppointments

FROM doctor
LEFT JOIN appointment ON doctor.doctor_id = appointment.doctor_id GROUP BY doctor_id;

答案 1 :(得分:0)

要获取doctor_id表中至少出现一次的appointments值列表,其中包含出现在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的所有行折叠成一行,因此我们返回一个不同的列表of doctor_id。

聚合函数SUM(1)基本上为每行返回1的文字值,然后将每行中的所有值与相同的doctor_id相加,实际上为我们计算了行数doctor_id

注意:您也可以使用COUNT(1)COUNT(*)代替SUM(1),这些将返回相同的结果。您可以使用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的表达式,对于没有匹配行的医生的行,该表达式为NULL。

答案 2 :(得分:-1)

SELECT 
doctor.doctor_id, 
count(appointment.doctor_id)
FROM doctor, 
appointment 
WHERE doctor.doctor_id = appointment.doctor_id group by doctor.doctor_id;

您可以使用分组条款......