본문 바로가기

sqld

2-11) 그룹 함수

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

 

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

 

** 문법

 

 

예) 각 컬럼의 COUNT 결과

  • PK인 (NULL을 포함하지 않는) 컬럼과 NULL을 포함하는 컬럼의 출력 결과 다름

 

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

 

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

 

** 문법

 

 

예) 평균 계산 결과

 

 

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

 

** 문법

 

 

VARIANCE / STDDEV
  • 분산과 표준편차
  • 표준편차는 분산의 루트값

 

** 문법

 

 

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

 

예) 본 GROUP BY 기능 - 그룹별 연산값만 출력되므로 전체 소계와 함께 출력될 수 없음

  • 전체 SUM(SAL)의 결과 출력 X

 

1. GROUPING SETS(A, B, ...)

  • A별, B별 그룹 연산 결과 출력
  • 나열 순서 중요하지 X
  • 기본 출력에 전체 총계는 출력되지 X
  • 전체 총 합 출력 → 괄호 안에 NULL 혹은 () 사용 !

 

예1) DEPTNO별 SAL의 총 합 결과와 JOB별 SAL의 총합 결과의 합집합

  • 기본 출력이므로 DEPTNO별과 JOB별 두 결과만 합집합하여 출력

 

UNION ALL로 대체 가능)

 

 

예2) 부서별 급여 총 합과, 업무별 급여 총 합, 그리고 전체 급여의 합을 출력 (전체 총계 포함)

  • 전체 총계를 포함하기 위해서는 괄호에 () 추가

 

2. ROLLUP(A, B)

  • A별, (A,B)별, 전체 그룹 연산 결과 출력
  • 나열 대상의 순서가 중요 → 첫 번째 컬럼은 단독 그룹 연산 결과 출력되기 때문
  • 기본적으로 전체 총 계가 출력됨

 

예) ROLLUP(DEPTNO, JOB) DEPTNO별, (DEPTNO, JOB)별, 전체 연산 결과 출력

  • 사진에 생략되었지만 전체 총합 결과도 출력 (DEPTNO NULL, JOB NULL, SUM(SAL) 29625)

 

UNION ALL로 대체 가능)

  • 원래 조회되지 않는 컬럼이지만 합집합 연산을 위해서 NULL로 SELECT

 

CUBE(A, B)
  • A별, B별, (A,B)별, 전체 그룹 연산 결과 출력됨
  • 그룹으로 묶을 대상의 나열 순서 중요하지 않음
  • 기본적으로 전체 총 계가 출력됨

 

예) DEPTNO별, JOB별, (DEPTNO, JOB)별, 전체 급여의 총 합 출력

  • 총 4가지 경우에 대한 결과 출력

 

UNION ALL로 대체)

 

GROUPING SETS로 대체)

 

 

 

 

'sqld' 카테고리의 다른 글

2-13) TOP N QUERY  (0) 2024.08.22
2-12) 윈도우 함수  (0) 2024.08.22
2-10) 집합 연산자  (0) 2024.08.21
2-9) 서브쿼리  (0) 2024.08.21
2-8) 표준 조인  (0) 2024.08.21