「ROLLUP」で合計と小計を一緒に求める方法
Oracleでは、GROUP BYの拡張として「ROLLUP」という構文を用意しています。
「ROLLUP」構文を使用することにより簡単に合計と小計を求めることができます。
「ROLLUP」の基本構文
基本構文は「GROUP BY」句に「ROLLUP」を書き加えるだけです。
GROUP BY ROLLUP( <列名> [,<列名>・・・])
「ROLLUP」構文の実行例
以下のテーブルとデータを使用して検証していきます。
year | month | price |
---|---|---|
2018 | 1 | 100 |
2018 | 1 | 200 |
2018 | 2 | 300 |
2019 | 3 | 400 |
2019 | 3 | 500 |
2019 | 4 | 600 |
--テーブル作成 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^)/
コメント