Oracle 「ROLLUP」で合計と小計を一緒に求める方法

スポンサーリンク
スポンサーリンク

「ROLLUP」で合計と小計を一緒に求める方法

Oracleでは、GROUP BYの拡張として「ROLLUP」という構文を用意しています。

「ROLLUP」構文を使用することにより簡単に合計と小計を求めることができます。

「ROLLUP」の基本構文

基本構文は「GROUP BY」句に「ROLLUP」を書き加えるだけです。

GROUP BY ROLLUP( <列名> [,<列名>・・・])

「ROLLUP」構文の実行例

以下のテーブルとデータを使用して検証していきます。

yearmonthprice
20181100
20181200
20182300
20193400
20193500
20194600
--テーブル作成
CREATE TABLE test_table
(
    year     VARCHAR2(8)
    ,month   VARCHAR2(4)
    ,price   NUMBER
);
--データ作成
INSERT ALL
INTO test_table VALUES('2018', '1', 100)
INTO test_table VALUES('2018', '1', 200)
INTO test_table VALUES('2018', '2', 300)
INTO test_table VALUES('2019', '3', 400)
INTO test_table VALUES('2019', '3', 500)
INTO test_table VALUES('2019', '4', 600)
SELECT * FROM dual;
--小計と合計を求めるSQL
SELECT year, month, SUM(price)
  FROM test_table
GROUP BY ROLLUP(year, month)
ORDER BY year, month;
SQL> SELECT year, month, SUM(price)
  2    FROM test_table
  3  GROUP BY ROLLUP(year, month)
  4  ORDER BY year, month;

YEAR             MONTH    SUM(PRICE)
---------------- -------- ----------
2018             1               300
2018             2               300
2018                             600
2019             3               900
2019             4               600
2019                            1500
                                2100

7行が選択されました。

こんなに簡単に小計と合計を求めることができました。\(^o^)/

コメント

タイトルとURLをコピーしました