SQLクリニック(5) Page 3/3

月別売り上げを四半期別に集計する関数ワザ

株式会社インサイトテクノロジー
岸本拓也
2005/6/25

四半期別の集計値を求める(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に特化した製品開発、コンサルティングを手掛けるエンジニア集団。岸本拓也は国内外を問わず問題解決に向けフットワークよく飛び回るシステム全般に精通したシステムコンサルタント。

  3/3  

 Index
連載 SQLクリニック(5)
月別売り上げを四半期別に集計する関数ワザ
  Page 1
・月別の集計値を求める
・四半期別の集計値を求める(UNION ALL編)
  Page 2
・四半期別の集計値を求める(DECODE編)
・四半期別の集計値を求める(SIGN編)
Page 3
・四半期別の集計値を求める(CASE式編)
・四半期別の集計値を求める(CEIL編)


SQLクリニック

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH