2016-12-31 8 views
0

私は3つのテーブルSQL - 条件ごとに異なる値の数を取得しますか?

**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 

部屋内の各シフトは1人の医者を持っており、各シフトではnurse.Nursesの数は、医師のスケジュールで作業する必要があります。私は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 
+0

なぜdoctor_schedule_id 4は結果に含まれていませんか? – GurV

+0

(nurse_schedule_id = 4)は(doctor_schedule_id = 4) – tuanptit

+0

のnurse_have_in_roomが来るはずですが、1人の看護婦が必要なroon_id = 2を持っているので、 –

答えて

1

することはでき、すべてのテーブル、このような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); 
+0

'HAVING SUM(r.nurse_needed)> COUNT(n.nurse_schedule_id)' - それは間違っているようです。それは 'HA.RU_nurse_needed> COUNT(n.nurse_schedule_id)'を持つ必要があります。 –

+0

私はそれを照会し、結果は部屋の 'nurse_needed'が間違っていることを示しています – tuanptit

+0

@ GurwinderSingh同じ結果を表示 – tuanptit

1

あなたはroomdoctor_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 
+0

私は12-30-2016をカウントしたいです。その日に2シフトには十分な看護師がいないので、シフト1とシフト2があります。 – tuanptit

関連する問題