Mysql 如何使用SQL查询表以给出ID的实例数?

Mysql 如何使用SQL查询表以给出ID的实例数?,mysql,sql,Mysql,Sql,我有两张医生和预约的桌子。我需要生成一个医生ID列表,其中包含每个医生一次或多次预约的预约次数 到目前为止,我有,但我不知道如何让它做我想要的: SELECT doctor.doctor_id, appointment.doctor_id FROM doctor, appointment WHERE doctor.doctor_id = appointment.doctor_id; SELECT COUNT(DISTINCT doctor_i

我有两张医生和预约的桌子。我需要生成一个医生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";

感谢您的帮助。

加入两个表并使用


您可以使用group by子句…

来获取在
预约
表中至少出现一次的
医生id
值列表,以及在
预约
表中出现的具有该医生id的行数,您可以使用如下查询:

SELECT a.doctor_id   AS doctor_id
     , SUM(1)        AS count_appointments
  FROM appointments a
 GROUP BY a.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
获得结果的关键是添加
groupbydoctor\u id
子句,该子句有效地将给定值
doctor\u id
的所有行压缩为一行,因此我们得到一个独特的doctor\u id列表

聚合函数
SUM(1)
基本上为每行返回一个1的文本值,然后将每行中具有相同医生id的所有这些值相加,有效地为我们提供具有该
医生id的行数的计数

注意:您也可以使用
计数(1)
计数(*)
代替
总和(1)
,它们将返回相同的结果。您可以使用
COUNT(expr)
,其中
expr
是对要包含在“COUNT”中的每一行计算为非空值的任何表达式


为了返回没有预约的医生id,我们将使用
医生
表作为外部联接操作的驱动表(假设医生id在医生表中是唯一的)

大概是这样的:

SELECT a.doctor_id   AS doctor_id
     , SUM(1)        AS count_appointments
  FROM appointments a
 GROUP BY a.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

同样地,
groupby
将具有相同的
doctor\u id
值的所有行折叠为一行,并且COUNT()聚合对该组进行操作。COUNT()函数中使用的表达式必须是一个表达式,该表达式对于约会表中的每个匹配行都不为NULL,对于医生中没有匹配行的行也不为NULL。

首先,您需要修复错误。1992是很久以前的事了。为什么在计数函数中需要一个distinct?已删除。当然是Group By。谢谢:)而且表别名不存在。不需要联接。不需要进行联接,也不需要为联接运算符调用老式的逗号语法。@spencer7593,如果OP使用逗号语法,那么在答案中这样做是完全有效的。因此投票反对是一种非常狭隘的想法。