トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-104 先頭二文字で集計
SQLパズル
KeyTable
key Item 数量
--- ---- ----
101 A 1
102 B 2
103 C 3
201 Z 6
202 Y 5
203 X 4
Keyの先頭二文字でグループ化して、
Keyは、最小のKeyの値
Itemは、最小のKeyのItemの値で、
数量は、数量の合計
を出力する。
出力結果
key Item 数量
--- ---- ----
101 A 6
201 Z 15
データ作成スクリプト
create table KeyTable(
key number(3),
Item char(1),
数量 number(1));
insert into KeyTable values(101,'A',1);
insert into KeyTable values(102,'B',2);
insert into KeyTable values(103,'C',3);
insert into KeyTable values(201,'Z',6);
insert into KeyTable values(202,'Y',5);
insert into KeyTable values(203,'X',4);
commit;
SQL
--■■■分析関数を使う方法■■■
select distinct
min(key) over(partition by substr(key,1,2)) as key,
First_Value(Item) over(partition by substr(key,1,2) order by key) as Item,
sum(数量) over(partition by substr(key,1,2)) as 数量
from KeyTable
order by key;
--■■■分析関数を使わない方法■■■
select a.key,b.Item,a.数量
from (select min(key) as key,sum(数量) as 数量
from KeyTable
group by substr(key,1,2)) a,KeyTable b
where a.key = b.key
order by a.key;
--■■■First関数を使う方法■■■
select min(key) as key,
max(Item) Keep(Dense_Rank First order by key) as Item,
sum(数量) as 数量
from KeyTable
group by substr(key,1,2)
order by substr(key,1,2);
解説
substr関数で、先頭二文字を取り出して
パーティションを切ったり、グループ化してます。