トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-150 特殊な数列を作成その1
SQLパズル
データディクショナリを使って、
以下の数列を作成する
出力結果
ColA ColB
---- ----
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 6
9 6
10 6
11 6
12 6
13 6
14 5
15 5
16 5
17 5
18 5
19 4
20 4
21 4
22 4
23 3
24 3
25 3
26 2
27 2
28 1
SQL
--■■■データディクショナリを使う方法■■■
select a.ColA,max(ColB) as ColB
from (select RowNum as ColA from all_catalog a where RowNum <= 7*(7+1)/2) a,
(select RowNum as ColB,sum(RowNum) over (order by RowNum desc) as summary
from all_catalog
where RowNum <=7) b
where a.ColA <= b.summary
group by a.ColA
order by a.ColA;
--■■■model句を使う方法(10g以降)■■■
select ColA,ColB,Counter
from dual
model
dimension by (1 as ColA)
measures(0 as ColB,7 as Counter)
rules ITERATE (28)(
Counter[iteration_number+1] = case when iteration_number = 0 then Counter[cv()]
when Counter[cv()-1] = 1 then ColB[cv()-1]-1
else Counter[cv()-1]-1 end,
ColB[iteration_number+1] = case when iteration_number = 0 then Counter[cv()]
when Counter[cv()-1] = 1 then ColB[cv()-1]-1
else ColB[cv()-1] end);
解説
数学者のガウスの考えた公式で、自然数の連番を作り、
分析関数で、等差数列の和を求めて、
結合させてます
ガウスの考えた公式(英語)
ガウスの考えた公式