-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 件のコメント:
コメントを投稿