-ROLLUPはGROUP BYと一緒に使用され、GROUP BYによりグループ化された結果に対して
もっと詳細な情報を返す時に使用する。
-SELECTにROLLUPを使用してSELECTされたデータとそのデータの合計を出力できる。
--GROUP BYでJOB別の給与合計を出力する例
SQL> SELECT job, SUM(sal)
2 FROM emp
3 GROUP BY job;
JOB SUM(SAL)
--------- ----------
CLERK 4150
SALESMAN 4350
PRESIDENT 5000
MANAGER 8275
ANALYST 6000
--ROLLUPを使用してJOB別給与合計と総計を出力する例
SQL> SELECT job, SUM(sal)
2 FROM emp
3 GROUP BY ROLLUP(job);
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 4350
27775 --給与合計の総計が追加された!
部署別に人数と給与合計を出力する例
--GROUP BYを使用した結果
SQL> SELECT b.dname, a.job, SUM(a.sal) sal,
2 COUNT(a.empno) emp_count
3 FROM emp a, dept b
4 WHERE a.deptno = b.deptno
5 GROUP BY b.dname, a.job;
DNAME JOB SAL EMP_COUNT
-------------- --------- ---------- ----------
SALES MANAGER 2850 1
SALES CLERK 950 1
ACCOUNTING MANAGER 2450 1
ACCOUNTING PRESIDENT 5000 1
ACCOUNTING CLERK 1300 1
SALES SALESMAN 4350 3
RESEARCH MANAGER 2975 1
RESEARCH ANALYST 6000 2
RESEARCH CLERK 1900 2
--部署別の人数と給与合計が見にくい
--部署に該当するJOB別給与と社員数を足して計算しなけれないけない。
--ROLLUPを使用すると簡単に結果がでる。
SQL> SELECT b.dname, a.job, SUM(a.sal) sal,
2 COUNT(a.empno) emp_count
3 FROM emp a, dept b
4 WHERE a.deptno = b.deptno
5 GROUP BY ROLLUP(b.dname, a.job);
DNAME JOB SAL EMP_COUNT
-------------- --------- ---------- ----------
SALES CLERK 950 1
SALES MANAGER 2850 1
SALES SALESMAN 4350 3
SALES 8150 5 ---> SALES部署の給与合計と社員数
RESEARCH CLERK 1900 2
RESEARCH ANALYST 6000 2
RESEARCH MANAGER 2975 1
RESEARCH 10875 5 ---> REASERCH部署の給与合計と社員数
ACCOUNTING CLERK 1300 1
ACCOUNTING MANAGER 2450 1
ACCOUNTING PRESIDENT 5000 1
ACCOUNTING 8750 3 ---> ACCOUNTING部署の給与合計と社員数
27775 13 ---> 全体給与合計と社員数
0 件のコメント:
コメントを投稿