꽤 오랫동안 티스토리를 할 수 없었는데 드디어 SQLD 시험을 마쳤다. 합격인지 아닌지 솔직히 너무 헷갈리는 문제들이 있었어서 아리송한데 결과가 2주즈음 뒤에 나오니 그냥 편하게 생각하려고 한다.
시험 공부하면서 SQL에 좀 익숙해진 느낌이다. 그룹함수는 그중에서도 시험에 단골 중에 단골이라 생각하면 된다.
그룹함수
- 소계/중계/합계/총합계 등을 구할 수 있음
- 하나의 SQL로 테이블을 한번만 읽어서 빠르게 원하는 리포트 작성 가능 (여러 레벨의 결산 보고가 필요할 때)
Group by (그룹함수) (속성명)
그룹함수의 종류
1. Rollup
- Subtotal(표현식 별 집계, 소계 <-> Grand Total)을 생성
- 그룹핑 컬럼 수가 n일 때, n+1만큼의 level의 Subtotal(소계) 결과값이 생성된다.
- 이 개념이 처음에는 정말 헷갈렸는데 직접 SQL문을 작성해서 결과를 몇 개만 확인하면 이해될 것이다.
- 계층 구조로 인수를 지정하므로 인수의 순서가 바뀌면 수행 결과도 바뀐다!
- ex. Rollup(부서, 업무, 성별) 인 경우
- 부서별, 업무별, 성별별 집계
- 부서별, 업무별 집계 - 모든 성별 포함
- 부서별 집계 - 모든 성별, 모든 업무 포함
- 전체 집계(Grand Total)
Select Dname, Job, Count(*) "Total Emp", Sum(Sal) "Total Sal"
From Emp E, Dept D
Where E.DeptNo = D.DeptNo
Group by Rollup(Dname, Job);
2. Cube
- 다차원적인 소계를 계산
- 결합 가능한/ 그룹핑 칼럼이 가질 수 있는 모든 값에 대해 다차원 집계(소계와 총계)를 생성
- 그룹핑 칼럼의 수가 n일 때, 2의 n승 Subtotal 이 생성
- ex. Cube(부서, 성별, 업무)인 경우 3개의 컬럼이므로 2의 3승인 8개의 결과가 나온다.
- 시스템의 성능에 무리를 많이 준다.
3. Grouping sets
- UnionAll 을 사용한 SQL 과 같은 결과를 얻을 수 있다.
- 특정 항목에 대한 소계, 즉 특정 항목을 그룹한 다수의 SQL을 Union 한 것
- 괄호를 묶은 집합 별로 집계를 구할 수 있다.
- 계층이 나타나지 않고 그룹핑된 결과값만 보여진다.
시험에서 알아야 하는 포인트
Rollup(A, B) 는 Grouping sets((A, B), A, ()) 와 같다.
그룹핑된 안의 인자는 소계, 집계의 모양을 나타낸 것과 같다.
() 는 전체 총계 / (A, B) 는 A와 B 컬럼을 그룹으로 묶은 소계
Cube(A, B) 는 Grouping sets((A, B), A, B, ()) 와 같다.
'Web Study > DataBase' 카테고리의 다른 글
SQLD 합격! 그리고 DAsP 도전 (0) | 2023.12.21 |
---|---|
SQL - 실체 엔터티에 대해... (0) | 2023.12.11 |
SQLD - 서브쿼리 (1) | 2023.10.31 |
SQLD - 계층형 질의 (0) | 2023.10.29 |
SQLD - 함수 - 단일행 함수 (0) | 2023.09.13 |