トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
9-37 順序無視でグループ化(2列)
SQLパズル
SalesSlipsテーブル
style_A style_B tally
------- ------- -----
12345 12345 12
12345 67890 9
67890 12345 5
11111 77777 11
11111 88888 22
77777 11111 30
77777 88888 44
88888 88888 55
88888 99999 66
99999 88888 33
style_Aとstyle_Bの順序を無視した組み合わせごとの
tallyの合計を以下の形式で出力する
出力結果
style_A style_B tally
------- ------- -----
12345 12345 12
12345 67890 14
66666 77777 41
66666 88888 22
77777 88888 44
88888 88888 55
88888 99999 99
SQLパズル(日本語版)のパズル40 [スタイルのペア] を参考にさせていただきました
SQLパズル 第2版のパズル44 [商品のペア] を参考にさせていただきました
データ作成スクリプト
create table SalesSlips(
style_A number(5) not null,
style_B number(5) not null,
tally number(2) not null);
insert into SalesSlips values(12345,12345,12);
insert into SalesSlips values(12345,67890, 9);
insert into SalesSlips values(67890,12345, 5);
insert into SalesSlips values(66666,77777,11);
insert into SalesSlips values(66666,88888,22);
insert into SalesSlips values(77777,66666,30);
insert into SalesSlips values(77777,88888,44);
insert into SalesSlips values(88888,88888,55);
insert into SalesSlips values(88888,99999,66);
insert into SalesSlips values(99999,88888,33);
commit;
SQL
select Least(style_A,style_B) as style_A,
greatest(style_A,style_B) as style_B,
sum(tally) as tally
from SalesSlips
group by Least(style_A,style_B),greatest(style_A,style_B)
order by style_A,style_B;
解説
Least関数と、greatest関数で
同一行でソートしてます