본문 바로가기
Web Study/DataBase

SQLD 그룹함수

by 쿠리의일상 2023. 11. 20.

꽤 오랫동안 티스토리를 할 수 없었는데 드디어 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