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

10-213 グラフの平行移動を意識したクエリ

SQLパズル

numberTable
Val
---
  1
  4
  7
 13
 32
 39
 99
100
105
110
111
157
234

Valを10区切りでの値の変換を行って、
以下の出力を行う。

出力結果
Val  Low   UP
---  ---  ---
  1    1   10
  4    1   10
  7    1   10
 13   11   20
 32   31   40
 39   31   40
 99   91  100
100   91  100
105  101  110
110  101  110
111  111  120
157  151  160
234  231  240

こちらを参考にさせていただきました(英語)


データ作成スクリプト

create table numberTable(Val) as
select   1 from dual union
select   4 from dual union
select   7 from dual union
select  13 from dual union
select  32 from dual union
select  39 from dual union
select  99 from dual union
select 100 from dual union
select 105 from dual union
select 110 from dual union
select 111 from dual union
select 157 from dual union
select 234 from dual;


SQL

select Val,
trunc(Val-1,-1)+ 1 as Low,
trunc(Val-1,-1)+10 as UP
  from numberTable;


解説

trunc(Val-1,-1)+ 1
は
y = trunc(Val,-1)+ 1
のグラフを、X軸方向に+1平行移動したと考えてます。

放物線の移動

■■■■■■■■■■■■■■■■■■■■■■■■
trunc(Val,-1)+ 1      trunc(Val-1,-1)+ 1
 99 →  91             99 →  91
100 → 101            100 →  91
101 → 101            101 → 101
102 → 101            102 → 101
103 → 101            103 → 101
104 → 101            104 → 101
105 → 101            105 → 101
106 → 101            106 → 101
107 → 101            107 → 101
108 → 101            108 → 101
109 → 101            109 → 101
110 → 111            110 → 101
111 → 111            111 → 111