SQL

[SQL] 그룹 함수

beginner-in-coding 2025. 2. 17. 18:36

01. 그룹 함수

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

02. 그룹 함수 - COUNT

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

03. 그룹 함수 -  SUM

  • 총 합 출력
  • 숫자 컬럼만 전달 가능
  • 문법
SUM(대상)  --그룹 함수: SUM

04. 그룹 함수 -  AVG

  • 평균 출력
  • 숫자 컬럼만 전달 가능
  • NULL을 제외한 대상의 평균을 리턴
    • 전체 대상으로 평균 연산시 주의
  • 문법
AVG(대상)  --그룹 함수: AVG
AVG(대상)  --결과 다름
SUM(대상) / COUNT(PK)  --결과 같음
AVG(NVL(대상, 0))   --결과 같음

05. 그룹 함수 -  MIN / MAX

  • 최소 / 최대 출력
  • 날짜, 숫자, 문자 모두 가능
    • 오름차순 순서대로 최소 / 최대 출력
  • 문법
MIN(대상)  --그룹 함수: MIN
MAX(대상)  --그룹 함수: MAX

06. 그룹 함수 -  VARIANCE / STDDEV

  • 분산표준편차
  • 표준편차는 분산의 루트값
  • 문법
VARIANCE(대상)  --그룹 함수: 분산
STDDEV(대상) --그룹 함수: 표준 편차

07. 그룹 함수 -  GROUP BY FUNCTION

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

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

  • A별, B별 그룹 연산 결과 출력
  • 나열 순서 중요 X
  • 기본 출력에 전체 총계는 출력되지 X
  • NULL 혹은 () 사용하여 전체 총 합 출력 가능
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY GROUPNIG SETS(deptno, job);  --deptno별 sal의 총 합 결과 와 job별 sal의 총 합 결과의 합집합(행)
SELECT deptno, NULL AS job, SUM(sal)
FROM emp
GROUP BY deptno
UNION ALL
SELECT NULL, job, SUM(sal)
FROM emp
GROUP BY job;  --UNION ALL로 대체 가능
SELECT deptno, hob, SUM(sal)
FROM emp
GROUP BY GROUPING SETS(deptno, job, ());  --부서별 급여 총 합, 업무별 급여 총 합, 전체 급여의 합을 출력

  2. ROLLUP(A, B)

  • A별, (A, B)별, 전체 그룹 연산 결과 출력
  • 나열 대상의 순서 중요
  • 기본적으로 전체 총 계가 출력
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno, job);  --deptno별, (deptno, job)별, 전체 연산 결과 출력
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY deptno, job
UNION ALL
SELECT deptno, NULL, SUM(sal)
FROM emp
GROUP BY deptno
UNION ALL
SELECT NULL, NULL, SUM(sal)
FROM emp;  --UNION ALL로 대체 가능

  3. CUBE(A, B)

  • A별, B별, (A, B)별, 전체 그룹 연산 결과 출력
  • 그룹으로 묶을 대상의 나열 순서 중요 X
  • 기본적으로 전체 총 계가 출력
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY CUBE(deptno, job);  --deptno별, job별, (deptno, job)별, 전체 급여의 총 합 출력
SELECT NULL AS deptno, NULL AS job, SUM(sal)
FROM emp
UNION ALL
SELECT NULL, job, SUM(sal)
FROM emp
UNION ALL
SELECT deptno, NULL, SUM(sal)
FROM emp
GROUP BY deptno
UNION ALL
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY deptno, job;  --UNION ALL로 대체 가능
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY GROUPING SETS(deptno, job, (deptno, job), ());  --GROUPING SETS로 대체 가능

'SQL' 카테고리의 다른 글

[SQL] TOP N QUERY  (0) 2025.02.26
[SQL] 윈도우 함수 (Window Function)  (0) 2025.02.26
[SQL] 집합 연산자  (0) 2025.02.17
[SQL] 서브쿼리  (0) 2025.02.17
[SQL] JOIN (2)  (0) 2025.02.17