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

4-11 総合計に対する比率を取得

SQLパズル

販売実績額テーブル
地域名  月  製品名   売上額
------  --  ------  ------
日本    11  ビデオ     100
日本    11  テレビ      40
日本    12  ビデオ     150
日本    12  テレビ      80
米国     1  ビデオ      70
米国    11  テレビ      60
米国    12  ビデオ     120
米国    12  テレビ      90

地域ごとの、その地域の売上に占める割合(小数第3位以下を切り捨て)を求める

出力結果
地域名  月   製品名  売上額  売上比率(%)
------  --  ------  ------  ------------
日本    11  ビデオ     100         27.02
日本    11  テレビ      40         10.81
日本    12  ビデオ     150         40.54
日本    12  テレビ      80         21.62
米国     1  ビデオ      70         20.58
米国    11  テレビ      60         17.64
米国    12  ビデオ     120         35.29
米国    12  テレビ      90         26.47
こちらを参考にさせていただきました


データ作成スクリプト

create table 販売実績額(
地域名 char(4),
月     number(2),
製品名 char(6),
売上額 number(3));

insert into 販売実績額 values('日本',11,'ビデオ',100);
insert into 販売実績額 values('日本',11,'テレビ', 40);
insert into 販売実績額 values('日本',12,'ビデオ',150);
insert into 販売実績額 values('日本',12,'テレビ', 80);
insert into 販売実績額 values('米国', 1,'ビデオ', 70);
insert into 販売実績額 values('米国',11,'テレビ', 60);
insert into 販売実績額 values('米国',12,'ビデオ',120);
insert into 販売実績額 values('米国',12,'テレビ', 90);
commit;


SQL

select 地域名,月,製品名,売上額,
trunc(Ratio_To_Report(売上額) over(partition by 地域名) * 100,2) as "売上比率(%)"
from 販売実績額;


解説

Ratio_To_Report関数を使うと、総合計に対する比率を取得できます

マニュアル(RATIO_TO_REPORT関数)
マニュアル(RATIO_TO_REPORT関数)(英語)