我有一张这样的表
第一张桌子是"约会"表' 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
我也执行了其他查询,但没有运气。
答案 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