来自不同表的SQL联接和计数
基本上,我有两张表,一张是医生表,第二张是预约表,我想计算每个医生的预约次数,但也包括列表中到目前为止没有预约的医生来自不同表的SQL联接和计数,sql,Sql,基本上,我有两张表,一张是医生表,第二张是预约表,我想计算每个医生的预约次数,但也包括列表中到目前为止没有预约的医生 SELECT DISTINCT doctor.doctor_id , sum(case when appt_date > 0 then 1 else 0 end) AppointmentCount FROM appointment,doctor JOIN doctor d WHERE appointment.doctor_id = d.doc
SELECT DISTINCT doctor.doctor_id
, sum(case when appt_date > 0 then 1 else 0 end) AppointmentCount
FROM appointment,doctor JOIN doctor d
WHERE appointment.doctor_id = d.doctor_id
group by doctor_id;
这会打印出每个医生的id,但会使每个医生的计数完全相同,而我希望他们根据预约的次数具有不同的值
你知道如何解决这个问题吗?你不需要使用
distinct
:分组依据
已经在对条目进行重复数据消除(因为它是按医生id
分组的)
最简单的方法是使用left join
:
select d.doctor_id
, count(a.appt_date) as appointmentCount
from doctor as d
left join appointment as a on d.doctor_id = a.doctor_id
group by d.doctor_id
使用医生id预约时的外部联接,按医生id分组。如果没有医生预约,请使用NVL,这样您就可以显示零个删除
distinct
关键字(请注意,您使用的是group by)。避免使用联接where
子句;尝试在上使用
Left Join
将为您提供预期的结果
您的查询将是:
SELECT d.doctor_id,
sum(case when a.appt_date > 0 then 1 else 0 end) AppointmentCount
FROM doctor d
left join appointment a
on d.doctor_id = a.doctor_id
group by d.doctor_id;
您可以在此处查看演示:-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表样式已被正确的ANSIJOIN
语法所取代,不鼓励使用它。此外:混合使用这两种样式肯定不是一个好主意!您使用的是哪种数据库?
SELECT d.doctor_id,
sum(case when a.appt_date > 0 then 1 else 0 end) AppointmentCount
FROM doctor d
left join appointment a
on d.doctor_id = a.doctor_id
group by d.doctor_id;
Select d.doctor_id, count(a.app_date) as count
from doctor d left join appointment a on (d.doctor_id = a.doctor_id)
group by d.doctor_id;