月別売り上げを四半期別に集計する関数ワザSQLクリニック(5)(3/3 ページ)

» 2005年06月25日 00時00分 公開
[岸本拓也株式会社インサイトテクノロジー]
前のページへ 1|2|3       

四半期別の集計値を求める(CASE式編)

 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
リスト9 CASE式を使った四半期別の売り上げ集計値

 CASE式にすると、非常に分かりやすくSQL文をコーディングできますね。でももっとシンプルな書き方があるのです。次のCEIL関数を使用した書き方です。

四半期別の集計値を求める(CEIL編)

 “CEIL”は引数を整数に切り上げる際に使用する関数です。

SQL> select ceil(1.5) from dual;
 CEIL(1.5)
----------
         2
リスト10 CEIL関数の簡単な使用例

 「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
リスト11 CEIL関数を使った四半期別の売り上げ集計値

 以上のように関数を駆使することでSQL文はよりパワフルになります。シンプルなSQL文を心掛ければ、メンテナンスも容易になりますし、場合によってはパフォーマンスも良くなったりします。皆さんもイロイロ工夫してSQL道を極めてくださいね。(次回に続く)

筆者紹介

株式会社インサイトテクノロジー

Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。大道隆久は緊迫したトラブル現場でも常に冷静沈着であり、スマートに解決へと導いていくシステムコンサルタント。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。