トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-22 変化した回数を取得
SQLパズル
tp cd man
-- -- ---
A 1 X
A 2 X
A 3 Y
A 4 X
B 1 Z
B 2 Z
B 3 Z
C 1 V
C 2 X
tpごとに、cdの昇順にmanを見て、
manが変化した回数を出力する。
出力結果
tp ctr
-- ---
A 3
B 1
C 2
データ作成スクリプト
create table table1(
tp char(1),
cd number(1),
man char(1));
insert into table1 values('A',1,'X');
insert into table1 values('A',2,'X');
insert into table1 values('A',3,'Y');
insert into table1 values('A',4,'X');
insert into table1 values('B',1,'Z');
insert into table1 values('B',2,'Z');
insert into table1 values('B',3,'Z');
insert into table1 values('C',1,'V');
insert into table1 values('C',2,'X');
commit;
SQL
--■■■sum関数とdecode関数を使用■■■
select tp,sum(decode(man,LagMan,0,1)) as ctr
from (select tp,man,
Lag(man) over (partition by tp order by cd) as LagMan
from table1)
group by tp
order by tp;
--■■■count関数とNullIf関数を使用■■■
select tp,count(NullIf(man,LagMan)) as ctr
from (select tp,man,
Lag(man) over (partition by tp order by cd) as LagMan
from table1)
group by tp
order by tp;
解説
Lag関数で前のmanを取得して、manが変化した回数を取得してます。