SQL-如何获取每个不同值的计数?
我有三张桌子SQL-如何获取每个不同值的计数?,sql,Sql,我有三张桌子 **room** room_id | nurse_needed ---------------------- 1 | 2 2 | 3 3 | 1 **doctor_schedule** doctor_schedule_id| room_id --------------------------- 1 | 1 2
**room**
room_id | nurse_needed
----------------------
1 | 2
2 | 3
3 | 1
**doctor_schedule**
doctor_schedule_id| room_id
---------------------------
1 | 1
2 | 2
3 | 3
*nurse_schedule*
nurse_schedule_id | doctor_schedule_id
--------------------------------------
1 | 1
2 | 1
3 | 2
每个房间都需要一些护士,一名医生在房间里工作,一名护士按照医生的时间表工作。我想数一数每个房间有多少护士。
结果应该是:
room_id | nurse_needed|nurse_have_in_room
---------------------------------------------
1 | 2 | 2
2 | 3 | 1
3 | 1 | 0
嗯
select r.*,
(select count(*)
from doctor_schedule ds join
nurse_schedule ns
on ds.doctor_schedule_id = ns.doctor_schedule_id
where ds.room_id = r.room_id
) as nurse_have_in_room
from room r;
嗯
select r.*,
(select count(*)
from doctor_schedule ds join
nurse_schedule ns
on ds.doctor_schedule_id = ns.doctor_schedule_id
where ds.room_id = r.room_id
) as nurse_have_in_room
from room r;
左键连接,以便找到没有安排护士的房间。计数(不同的ns.nurse\u schedule\u id),如果需要,查看有多少不同的护士组成计数 通常你也有时间成分。类似于“where r.roomdate=ns.date” 左键连接,以便找到没有安排护士的房间。
计数(不同的ns.nurse\u schedule\u id),如果需要,查看有多少不同的护士组成计数 通常你也有时间成分。类似于“where r.roomdate=ns.date”
select r.room_id,
r.nurse_needed,
ns.nurses_scheduled,
ns.dist_nurses_scheduled
from room r
left join (select ds.room_id,
count(1) nurses_schedule,
count(distinct ns.nurse_schedule_id) dist_nurses_scheduled
from doctor_schedule ds
join nurse_schedule ns
on ds.doctor_schedule_id = ns.doctor_schedule_id
group by ds.room_id) as ns
on r.room_id = ns.room_id