Oracleのバージョンが「9i」以上であれば、“CASE”式が使用できます。CASE式を使用するとSQL文で「IF...THEN...ELSE」論理を使用できます。
SQL> select
case
when month between 1 and 3 then '1Q'
when month between 4 and 6 then '2Q'
when month between 7 and 9 then '3Q'
when month between 10 and 12 then '4Q'
end CODE,
sum(sal)
from sales
group by
case
when month between 1 and 3 then '1Q'
when month between 4 and 6 then '2Q'
when month between 7 and 9 then '3Q'
when month between 10 and 12 then '4Q'
end;
CODE SUM(SAL)
---- ----------
1Q 318000
2Q 301500
3Q 321600
4Q 442200
CASE式にすると、非常に分かりやすくSQL文をコーディングできますね。でももっとシンプルな書き方があるのです。次のCEIL関数を使用した書き方です。
“CEIL”は引数を整数に切り上げる際に使用する関数です。
SQL> select ceil(1.5) from dual;
CEIL(1.5)
----------
2
「1.5」が整数に切り上げられ、戻り値として「2」が得られました。通常だとあまり日の目を見ない関数ですが、以下のようなサンプル表から四半期別の集計値を求める際には大活躍します。
SQL> select ceil(month/3)||'Q' quarter,sum(sal)
from sales
group by ceil(month/3);
QUARTER SUM(SAL)
------- ----------
1Q 318000
2Q 301500
3Q 321600
4Q 442200
以上のように関数を駆使することでSQL文はよりパワフルになります。シンプルなSQL文を心掛ければ、メンテナンスも容易になりますし、場合によってはパフォーマンスも良くなったりします。皆さんもイロイロ工夫してSQL道を極めてくださいね。(次回に続く)
Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。大道隆久は緊迫したトラブル現場でも常に冷静沈着であり、スマートに解決へと導いていくシステムコンサルタント。
Copyright © ITmedia, Inc. All Rights Reserved.