繁体   English   中英

SQL-获取每个带条件的不同值的计数?

[英]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_scheduleroom以及对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM