본문 바로가기

[DB]DataBase/[SQL]

[SQLD] 그룹 함수

728x90
반응형

그룹 함수

  • 숫자함수 중 여러 값을 전달하여 하나의 요약값을 출력하는 다중행 함수
  • 수학/통계 함수 (기술통계 함수) 들을 의미
  • GROUP BY절에 의해 그룹별 연산 관계를 리턴
  • 반드시 한 컬럼만 전달
  • NULL은 무시하고 연산

 

COUNT

  • 행의 수를 세는 함수
  • 대상 컬럼은 * 또는 단 하나의 컬럼만 전달 가능
    • * 사용 시 모든 컬럼의 값이 NULL일 때만 COUNT 제외
  • 문자, 숫자, 날짜 컬럼 모두 전달 가능
  • 행의 수를 세는 경우 NOT NULL 컬럼을 찾아 세는 것이 좋음 (PK 컬럼)

COUNT 함수 문장

SUM

  • 총 합 출력
  • 숫자 컬럼만 전달 가능

AVG

  • 평균 출력
  • 숫자 컬럼만 전달 가능
  • NULL을 제외한 대상의 평균을 리턴하므로 전체 대상 평균 연산 시 주의

MIN / MAX

  • 최소(MIN) / 최대(MAX) 값 출력
  • 날짜, 숫자, 문자 모두 가능
    • 오름차순 순서대로 최소, 최대 출력

VARIANCE / STDDEV

  • 평균, 표준편차 출력
  • 표준편차는 평균값의 루트값

GROUP BY FUNCTION

  • GROUP BY절에 사용하는 함수
  • 여러 GROUP BY 결과를 동시에 출력하는 기능 (합집합)
  • 그룹핑 할 그룹을 정의 (전체 소계 등) 

GROUPING SETS(A, B, ...)

  • A별, B별 그룹 연산 결과 출력
    • 다양한 소계 집합을 만들 수 있는데, GROUPING SETS에 표시된 인수들에 대한 개별 집계를 구할 수 있으며, 이때 표시된 인수들 간에는 계층 구조인 ROLLUP과는 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 같다.
  • 나열 순서는 중요하지 않음
    • 결과에 대한 정렬이 필요한 경우에는 ORDER BY 절에 명시적으로 정렬 컬럼이 표시되어야 한다.
  • 기본 출력에 전체 총계는 출력되지 않음
  • NULL 혹은 () 을 사용하여 전체 총 합 출력 가능
  • DEPTNO별 SAL의 총 합 결과와 JOB별 SAL의 총 합 결과의 합집합GROUPING SETS() 예시
    • GROUPING SETS() 에 나열한 대상에 대해 각 GROUP BY의 결과를 출력
  • UNION ALL을 사용하여 동일한 결과 출력 가능UNION ALL을 사용한 예시

ROLLUP(A, B)

  • A별, (A, B)별, 전체 그룹 연산 결과 출력
  • 나열 대상의 순서가 중요함
  • 기본적으로 전체 총 합이 출력됨

UNION으로 대체 가능

ROULL UP을 UNION ALL로 대체한 예시

CUBE(A, B)

  • 결합 가능한 모든 값에 대하여 다차원 집계를 생성
    • A별, B별, (A, B)별, 전체 그룹 연산 결과를 출력
  • 그룹으로 묶을 대상의 나열 순서는 중요하지 않음
    • 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 컬럼이 표시되어야 한다.
  • 기본적으로 전체 총 합이 출력
  • Grouping Columns가 가질 수 있는 모든 경우에 대하여 Subtotal을 생성해야 하는 경우에는 CUBE를 사용하는 것이 바람직하나, ROLLUP에 비해 시스템에 많은 부담을 주므로 사용에 주의해야 한다.

CUBE(A, B) 예시
CUBE(A, B)를 UNION ALL로 대체한 예시
CUBE(A, B)를 GROUPING SETS()로 대체한 예시

반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] Top N 쿼리  (0) 2024.05.18
[SQLD] 윈도우 함수  (0) 2024.05.16
[SQLD] 집합 연산자  (0) 2024.05.06
[SQLD] 서브 쿼리  (0) 2024.05.05
[SQLD] 표준 조인  (0) 2024.05.05