如何将Count(*)列与Mysql中的另一列连接

时间:2014-03-31 23:03:33

标签: mysql sql count

我有一张这样的表

第一张桌子是"约会"表' doctor_id'第二个表是" Doctors"表格还有' doctor_id'。约会表中的重复值表示每位医生的预约次数。例如,doctor_id(50)有6个约会。

doctor_id(Appointments)   |  doctor_id(Doctors)
          50              |         50
          50              |         51
          50              |         52
          52              |         53
          50              |
          50              |
          52              |
          53              |
          50              |

现在,我的问题是如何在下面显示此表(ps不包括医生ID' 51)

doctor_id (Doctors) |  Count
        50          |    6
        52          |    2
        53          |    1

这是我到目前为止所尝试的,我已经设法计算出有多少医生预约 使用:

SELECT COUNT(*) FROM appointment 
WHERE doctor_id > 50

我也执行了其他查询,但没有运气。

4 个答案:

答案 0 :(得分:1)

SELECT d.doctor_id, COUNT(a.doctor_id) FROM doctors d
Join  appointment a 
d.doctor_id =a.doctor_id
WHERE d.doctor_id > 50
GROUP BY a.doctor_id

尝试此代码并希望这可行。我正在通过id

对医生预约进行分组

答案 1 :(得分:1)

您可以使用Group By doctor_id来计算每个doctor_id重复的次数:

SELECT doctor_id,COUNT(doctor_id) FROM appointment GROUP BY doctor_id

答案 2 :(得分:0)

假设doctor_id表中doctors是唯一的......

SELECT d.doctor_id        AS doctor_id
     , COUNT(a.doctor_id) AS appointment_count
  FROM doctors d
  LEFT
  JOIN appointments a
    ON a.doctor_id = d.doctor_id
 GROUP BY d.doctor_id

要通过doctor_id获取计数,您需要GROUP BY doctor_id。您不必在SELECT列表中包含doctor_id,但如果您只返回COUNT(),则只需获取一系列计数:

 appointment_count
 -----------------
                 6
                 0
                 2
                 1

没有指示哪个appointment_count与哪个doctor_id有关。因此,通常的模式是在SELECT列表中包含GROUP BY。

为了返回医生51的0计数,我们想要一个外部联接到约会表,所以即使没有匹配也会返回医生表中的行。


如果您只想要有一个或多个约会的医生的行,那么您可以查询 约会表。 (此查询不会为医生返回任何“零”计数。)

SELECT a.doctor_id
     , COUNT(1) AS appointment_count
  JOIN appointments a
 GROUP BY a.doctor_id

同样,GROUP BY子句对于获取doctor_id的每个不同值的行数是必要的。这有效地将每个doctor_id的行折叠成一行。聚合函数在行的“组”上运行。

答案 3 :(得分:0)

鉴于问题中的信息,只需使用约会表即可实现:

SELECT appointments.doctor_id, Count(appointments.doctor_id)
  FROM appointments
  GROUP BY appointments.doctor_id;

然而,由于问题特别询问了JOIN,以下代码将起作用:

SELECT d.doctor_id, COUNT(a.doctor_id) AS appointment_count
  FROM doctors d
  JOIN appointments a
  ON a.doctor_id = d.doctor_id
  GROUP BY d.doctor_id;

SQLFiddle提供了一个工作示例:SQLFiddle