2013/08/27

10-03.集計関数(Aggregate function)【ROLLUP 】

■ROLLUP operator
 -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 件のコメント:

コメントを投稿

QLOOKアクセス解析