トップページに戻る
次の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関数で求める時は、計算順序に注意