本連載はSQLの応用力を身に付けたいエンジニア向けに、さまざまなテクニックを紹介する。SQLの基本構文は平易なものだが、実務で活用するには教科書的な記述を理解するだけでは不十分だ。本連載は、著名なメールマガジン「おら!オラ! Oracle - どっぷり検証生活」を発行するインサイトテクノロジーのコンサルタントを執筆陣に迎え、SQLのセンス向上に役立つ大技小技を紹介していく。(編集局)
今回は集計時に使用すると便利な関数にターゲットを絞って解説します。集計時に使用される関数には
などがあります。例えば、リスト1のサンプル売り上げ表から月別の売り上げ集計を求めてみましょう。
SQL> desc sales 名前 型 ----------------------------------------- ------------------- PRODUCT_CODE NUMBER MONTH NUMBER SAL NUMBER
SQL> select month,sum(sal) from sales group by month order by 1;
MONTH SUM(SAL)
---------- ----------
1 50000
2 107200
3 160800
4 80400
5 100500
6 120600
7 93800
8 107200
9 120600
10 134000
11 147400
12 160800
簡単ですね。では四半期別の売り上げ集計を求めるには、どうすればよいでしょう。
まずいちばん簡単なのは“UNION ALL”で連結してしまう方法ではないでしょうか。UNION ALLは2つ以上のクエリの結果を連結する集合演算子です。
SQL> select '1Q' quarter,sum(sal) from sales
where month between 1 and 3
union all
select '2Q' quarter,sum(sal) from sales
where month between 4 and 6
union all
select '3Q' quarter,sum(sal) from sales
where month between 7 and 9
union all
select '4Q' quarter,sum(sal) from sales
where month between 10 and 12;
QUARTER SUM(SAL)
------- ----------
1Q 318000
2Q 301500
3Q 321600
4Q 442200
ただし、この場合同じSALES表に4回アクセスしていますので、効率が悪いSQL文となっています。パフォーマンス上問題になるかもしれません。(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.