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

2-3-16 総積を求める

SQLパズル

総積テーブル
No  数値
--  ----
 1     3
 2     9
 3    -6
 4     5
 5  -0.1
 6     5
 7    -2
 8     0
 9    10

Noまでの総積を求める。

出力結果
No  数値  総積
--  ----  ----
 1     3     3
 2     9    27
 3    -6  -162
 4     5  -810
 5  -0.1    81
 6     5   405
 7    -2  -810
 8     0     0
 9    10     0


データ作成スクリプト

create table 総積(
No   number(1),
数値 number(3,1));

insert into 総積 values(1, 3);
insert into 総積 values(2, 9);
insert into 総積 values(3,-6);
insert into 総積 values(4, 5);
insert into 総積 values(5,-0.1);
insert into 総積 values(6, 5);
insert into 総積 values(7,-2);
insert into 総積 values(8, 0);
insert into 総積 values(9,10);
commit;


SQL

select No,数値,
case when max(decode(数値,0,1,0)) over(order by No) = 1 then 0
else round(exp(sum(Ln(abs(nullif(数値,0)))) over (order by No))) end
* power(-1,sum(decode(sign(数値),-1,1,0)) over(order by No)) as 総積
from 総積
order by No;


解説

abs関数で、絶対値に対する自然対数を取得してます。

model句02 総積を求める