トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model編16 model句での累計取得

SQLパズル

三角数を順に求める。

 1までの自然数の和=1
 2までの自然数の和=3
 3までの自然数の和=6
 4までの自然数の和=10
 5までの自然数の和=15
 6までの自然数の和=21
 7までの自然数の和=28
 8までの自然数の和=36
 9までの自然数の和=45
10までの自然数の和=55

出力結果
Val
---
  1
  3
  6
 10
 15
 21
 28
 36
 45
 55


SQL

--■■■方法1■■■
select Val
  from dual
 model
 dimension by(1 as soeji)
 measures(0 as Val)
 rules(Val[for soeji from 1 to 10 INCREMENT 1]
     = cv(soeji)+nvl(Val[cv()-1],0));

--■■■方法2■■■
select Val
  from dual
 model
 dimension by(1 as soeji)
 measures(0 as wk,0 as Val)
 rules(wk[for soeji from 1 to 10 INCREMENT 1] /*order by soeji*/= cv(soeji),
       val[any] /*order by soeji*/= sum(wk)[soeji <= cv(soeji)])
order by wk;


解説

rules句でsum関数を使う際には、
2重(多重)加算に注意する必要があります。

方法2は、きっちりとorder byをつけた方が無難かもしれません。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
2重(多重)加算に気づかなかった
rulesの中で累計をsum関数で求める時は、計算順序に注意