トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

9-7 行事の間に宿泊した客を取得その2

SQLパズル

宿泊者テーブル                    行事テーブル
Name     CheckIN    CheckOut     行事名    StartDay      EndDay
----  ----------  ----------     ------  ----------  ----------
Al    1999/02/01  1999/11/01     元旦    1999/01/01  1999/01/01
Ben   1999/12/10  1999/12/20     正月    1999/01/01  1999/01/03
Ed    1999/01/01  1999/11/11     七夕    1999/07/07  1999/07/07
Joe   1999/02/01  1999/02/28     大晦日  1999/12/31  1999/12/31
Ken   1999/12/01  1999/12/25

宿泊者テーブルと、行事テーブルから
行事の間に宿泊した客の数を出力する。

出力結果
行事名   宿泊者数
------  --------
元旦           1
正月           1
七夕           2
大晦日         0

プログラマのためのSQL第2版の13章[betweenとOverLaps述語]を参考にさせていただきました


データ作成スクリプト

前のSQLパズルと同じ


SQL

select a.行事名,
(select count(*) from 宿泊者 b
  where a.StartDay <= b.CheckOut and b.CheckIn <= a.EndDay) as 宿泊者数
from 行事 a
order by a.StartDay,a.EndDay;


解説

count関数で宿泊者数を取得してます。

10-226 OverLaps述語