トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
5-31 相関サブクエリで件数取得
SQLパズル
営業日テーブル
日付 営業日フラグ (営業日は1、休業日は0)
---------- ------------
2004-10-01 1
2004-10-02 0
2004-10-03 0
2004-10-04 1
2004-10-05 1
2004-10-06 1
2004/10/1から日付までの営業日の数を出力する。
出力結果
日付 営業日フラグ 営業日数
---------- ------------ --------
2004-10-01 1 1
2004-10-02 0 1
2004-10-03 0 1
2004-10-04 1 2
2004-10-05 1 3
2004-10-06 1 4
データ作成スクリプト
create Table 営業日テーブル(
日付 date,
営業日フラグ number(1));
insert into 営業日テーブル values(to_date('20041001','yyyymmdd'),1);
insert into 営業日テーブル values(to_date('20041002','yyyymmdd'),0);
insert into 営業日テーブル values(to_date('20041003','yyyymmdd'),0);
insert into 営業日テーブル values(to_date('20041004','yyyymmdd'),1);
insert into 営業日テーブル values(to_date('20041005','yyyymmdd'),1);
insert into 営業日テーブル values(to_date('20041006','yyyymmdd'),1);
commit;
SQL
--■■■count関数を使用■■■
select to_char(日付,'yyyy-mm-dd') as 日付,営業日フラグ,
(select count(b.営業日フラグ) from 営業日テーブル b
where b.日付 <= a.日付
and b.営業日フラグ=1) as 営業日数
from 営業日テーブル a
order by 日付;
--■■■sum関数を使用■■■
select to_char(日付,'yyyy-mm-dd') as 日付,営業日フラグ,
(select sum(b.営業日フラグ) from 営業日テーブル b
where b.日付 <= a.日付) as 営業日数
from 営業日テーブル a
order by 日付;
--■■■分析関数を使用■■■
select to_char(日付,'yyyy-mm-dd') as 日付,営業日フラグ,
sum(営業日フラグ) over(order by 日付) as 営業日数
from 営業日テーブル
order by 日付;
解説
select句で相関サブクエリを使用して、営業日の数をカウントしてます。
分析関数を使う方法もあります。
7-1 累計を取得