병갈이 블록

Group by 함수 정리_v0.1 본문

IT(Old)/Oracle 기록

Group by 함수 정리_v0.1

woojang 2019. 8. 27. 16:59

1. ROLLUP() 정리
    - 위치 : GROUP BY 내부. (EX> GROUP BY ROLLUP(A, B), GROUP BY A, ROLLUP(B, C), ...)
    - 원리 : ROLLUP(1, 2, 3, ..., n) -> 가장 마지막 항목부터 차례로 뺀 그룹핑이 이루어짐.(이게 이해하기가 좀 난해함. 하지만, try!! **정렬순서는 기술하지 않음. 항상 아래 예제순서로 정렬되지는 않는다.)
        ex1) GROUP BY ROLLUP(A, B, C) -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY A, B, (null)], [GROUP BY A, (null), (null)], [GROUP BY (null), (null), (null) --ROLLUP으로 쌓인 그룹의 전체건에 대한 집계결과출력.]
        ex2) GROUP BY A, ROLLUP(B, C) -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY A, B, (null)], [GROUP BY A, (null), (null)]
        ex3) GROUP BY A, B, ROLLUP(C) -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY A, B, (null)]
        ex4) GROUP BY A, ROLLUP(B), C -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY A, (null), C]
        ex5) GROUP BY ROLLUP(A), B, C -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY (null), B, C]
        ex6) GROUP BY ROLLUP(A), B, ROLLUP(C) -> 출력 항목은 [GROUP BY A, B, C], [GROUP BY (null), B, C][GROUP BY AB, (null)][GROUP BY (null)B, (null)]
    - 컬럼들을 그룹화 하기 : ROLLUP(1, 2, (3, 4)) -> 이와같은 경우 GROUP BY는 4개가 아닌 3개에 대한 그룹핑이 이루어진다. (**(3, 4)를 각각의 컬럼이 아닌 3,4를 묶어 하나의 컬럼으로 그룹핑함. 즉, 함수에 주어진 하나의 인자를 하나의 컬럼단위로 처리)

*** ROLLUP에 대한 나름의 결론!!!
1. ROLLUP함수는 GROUP BY 내 다양한 그룹핑을 만들어 낸다. ROLLUP함수 내부로 들어간 인자가 가장 뒤쪽부터 순차적으로 빠져서 전부 없는 상태까지의 경우의 수를 만들어 낸다.(예 - GROUP BY ROLLUP(1, 2, 3) = GROUP BY 1, 2, 3 / GROUP BY 1, 2 / GROUP BY 1 / 전체)
2. GROUP BY 내 일반 컬럼과 ROLLUP함수가 뒤섞여 있을 경우 ROLLUP함수 외부에 있는 컬럼은 항상 존재하는 상태에서 위 1번의 규칙이 적용된다.
(예1 - GROUP BY 1, ROLLUP(2, 3) = GROUP BY 1, 2, 3 / GROUP BY 1, 2 / GROUP BY 1)
(예2 - GROUP BY ROLLUP(1, 2), 3 = GROUP BY 1, 2, 3 / GROUP BY 1, 3 / GROUP BY 3)

2. GROUPING() 정리
    - ROLLUP, CUBE함수와 함께 사용.
    - 해당 함수로 소계된 컬럼이라면 1, 소계되지 않았다면 0을 리턴한다.
    - 내방식대로 쉽게 정리해보면..해당 컬럼이 ROLLUP기준 상위레벨 컬럼 기준으로 전체 소계되어 결과 레코드 중 하나가 소계된 레코드여서 해당 컬럼값이 'NULL'이라면 1. 해당 컬럼의 상위레벨 컬럼 기준으로 소계된 레코드가 아니어서 컬럼이 값을 가지고 있다면 0을 출력한다.(응용, CASE GROUPING(A) WHEN 0 THEN A ELSE '합계' END )

'IT(Old) > Oracle 기록' 카테고리의 다른 글

오라클 유저 생성 및 권한.  (0) 2019.09.25
오라클 에러 정리.  (0) 2019.09.25
Docker에 오라클 설치 및 sqlplus 진입  (0) 2019.09.25
Spring 연동 01  (0) 2018.11.13
기본 DDL  (0) 2018.11.12
Comments