[英]SQL - Get the count of each distinct value with condition?
我有三张桌子
**room**
room_id | nurse_needed
----------------------
1 | 3
2 | 1
3 | 2
**doctor_schedule**
doctor_schedule_id| room_id | date |shift
-------------------------------------------------
1 | 1 |12-30-2016| 1
2 | 2 |12-31-2016| 2
3 | 3 |12-30-2016| 2
4 | 2 |12-30-2016| 2
*nurse_schedule*
nurse_schedule_id | doctor_schedule_id
--------------------------------------
1 | 1
2 | 1
3 | 3
房间的每个班次都有一名医生,而每个班次都需要一名护士。护士按照医生的时间表工作。 我想算一下12-30-2016
有多少轮班没有足够的护士。 结果应为:
doctor_schedule_id| room_id | date |shift | nurse_needed|nurse_have_in_room
------------------------------------------------------------------------------
1 | 1 |12-30-2016| 1 | 3 | 2
3 | 3 |12-30-2016| 2 | 2 | 1
4 | 2 |12-30-2016| 2 | 1 | 0
您可以将doctor_schedule
与room
以及对nurse_schedule
的汇总查询一起nurse_schedule
:
SELECT d.*, r.nurse_needed, n.nurses_in_room
FROM doctor_schedule d
JOIN room r ON d.room_id = r.room_id
JOIN (SELECT doctor_schedule_id, COUNT(*) AS nurses_in_room
FROM nurse_schedule
GROUP BY doctor_schedule_id) n ON
d.doctor_schedule_id = n.doctor_schedule_id AND
r.nurse_needed > n.nurses_in_room
您可以像这样INNER JOIN
所有表格,并过滤掉所需护士人数少于或等于已经存在的护士人数的表格。
select d.doctor_schedule_id,
d.room_id,
d.date,
d.shift,
r.nurse_needed,
COUNT(distinct n.nurse_schedule_id) nurse_have_in_room
from doctor_schedule d
inner join room r on r.room_id = d.room_id
left outer join nurse_schedule n on d.doctor_schedule_id = n.doctor_schedule_id
where d.date = '12-30-2016'
group by d.doctor_schedule_id,
d.room_id,
d.date,
d.shift,
r.nurse_needed
having r.nurse_needed > COUNT(distinct n.nurse_schedule_id);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.