[ Oracle - GROUPING() 1 단계 ]

 


☞  정의

 

GROUPING()함수 정의
1. GROUPING() 함수
 ROLLUP() CUBE() 함수에 모두 사용할  있다.
2. GROUPING
함수는
  SQL  결과가  GROUP BY 의해서 나온 결과는 0 반환하고
   ROLLUP이나
 CUBE 의해서 산출된 결과에는 1 반환한다.
3. 
결론은
, GROUPING함수는 SQL 문에 의해서 나온결과가  GROUP BY 자료인지,
   ROLLUP, CUBE
 의해서 나온결과인지를   있도록 지원해주는 함수 이다.

 

--SQL1

WITH salary AS
(
    SELECT '총무부' DEPT, '저미주' NAME, '01' SMONTH, 100000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '저미주' NAME, '02' SMONTH, 115000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '저미주' NAME, '03' SMONTH, 112000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '강모리' NAME, '07' SMONTH, 510000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '강모리' NAME, '08' SMONTH, 450000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '강모리' NAME, '09' SMONTH, 610000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '구하라' NAME, '05' SMONTH, 210000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '구하라' NAME, '06' SMONTH, 210000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '구하라' NAME, '07' SMONTH, 210000 SALARY FROM dual UNION ALL
    SELECT '총무부' DEPT, '구하라' NAME, '08' SMONTH, 210000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '구하라' NAME, '01' SMONTH, 200000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '구하라' NAME, '02' SMONTH, 210000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '구하라' NAME, '03' SMONTH, 230000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '구하라' NAME, '04' SMONTH, 230000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '이주리' NAME, '01' SMONTH, 150000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '이주리' NAME, '02' SMONTH, 160000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '이주리' NAME, '03' SMONTH, 170000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '저미주' NAME, '04' SMONTH, 112000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '저미주' NAME, '05' SMONTH, 112000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '저미주' NAME, '06' SMONTH, 112000 SALARY FROM dual UNION ALL
    SELECT '인사부' DEPT, '저미주' NAME, '07' SMONTH, 112000 SALARY FROM dual
)

SELECT DEPT, NAME, COUNT(*), SUM(SALARY), GROUPING(DEPT), GROUPING(NAME)
  FROM salary
 WHERE SMONTH BETWEEN '01' AND '12'
 GROUP BY CUBE(DEPT, NAME)
 ORDER BY DEPT, NAME;

 DEPT      NAME     COUNT(*)      SUM(SALARY)      GROUPING(DEPT)   GROUPING(NAME)
 
----------------------------------------------------------------------------------
 인사부    구하라       4          870000            0                 0
 인사부    이주리       3          480000            0                 0
 인사부    저미주       4          448000            0                 0
 인사부                11         1798000            0                 1   <--CUBE의한 결과
 총무부    강모리     3         1570000             0                 0
 총무부    구하라     4          840000             0                 0
 총무부    저미주     3          327000             0                 0
 총무부             10        2737000             0                   1   <--CUBE의한 결과
        강모리     3         1570000             1                 0   <--CUBE 의한결과
        구하라     8         1710000             1                 0   <--CUBE 의한결과
        이주리     3          480000             1                 0   <--CUBE 의한결과
        저미주     7          775000             1                 0   <--CUBE 의한결과
                 21         4535000             1                   1   <--CUBE의한 결과

* 위 결과중  아래자료는 (부서, 이름에 대한 총계 이므로 1,1 결과가 나왔음)
SQL2 : 
기타
 추가 SQL문들
       WITH
 위자료를 활용

SELECT DEPT, NAME, COUNT(*), SUM(SALARY), GROUPING(DEPT), GROUPING(NAME)
  FROM salary
 WHERE SMONTH BETWEEN '01' AND '12'
 GROUP BY DEPT, CUBE(NAME)   --GROUP BY CUBE(DEPT), NAME
 ORDER BY DEPT, NAME;

 

 

'(DB) Oracle > SQL.통계-단계별Study' 카테고리의 다른 글

Oracle - OVER 1단계  (0) 2017.01.21
Oracle - GROUPING() 3 단계  (0) 2017.01.21
Oracle - ROUPING() 2 단계  (0) 2017.01.21
Oracel - CUBE 1 단계  (0) 2017.01.21
Oracle - ROLLUP 1 단계  (0) 2017.01.21
Posted by 농부지기
,