일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spring
- AF-S 18-35mm
- 풍경
- 여름성경학교
- 18-35mm
- 니콘
- daily
- 카메라
- 85mm f/1.8G
- nikkor
- 사진
- 하늘풍경
- camera
- AF-S NIKKOR 18-35mm f/3.5-4.5G ED
- 렌즈
- 꽃
- af-s 18-35
- 경치
- 일상
- 출사
- 푸초
- 85mm 1.8g
- AF-S NIKKOR 50mm f/1.8G
- Nikon
- Photo
- 50mm f/1.8G
- AF-S NIKKOR 85mm f/1.8G
- 50mm
- D750
- 푸른초장교회
- Today
- Total
병갈이 블록
Group by 함수 정리_v0.1 본문
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 A, B, (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 |