본문 바로가기
스터디/SQL

[정리노트] SQLD 2024년 개정판 - 그룹함수

by 견습생L 2024. 8. 22.

[정리노트] SQLD 2024년 개정판 - 그룹함수


그룹 함수

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

COUNT

  • 내부 조인이라고 하며, 조인 조건이 일치하는 행만 추출 (Oracle 조인 기본)
  • 행의 수를 세는 함수
  • 대상 컬럼은 * 또는 단 하나의 컬럼만 전달 가능 (* 사용 시 모든 컬럼의 값이 NULL일 때만 COUNT 제외)
  • 문자, 숫자, 날짜 컬럼 모두 전달 가능
  • 행의 수를 세는 경우 NOT NULL 컬럼을 찾아 세는 것이 좋음 (PK컬럼)
  • 문법
    COUNT(대상)
    
    ex) 각 컬럼의 COUNT 결과

SELECT COUNT(*),
       COUNT(EMPNO),
       COUNT(COMM)
  FROM EMP;

→ 두 집합의 EMPNO 컬럼의 데이터 타입이 다르므로 한 쪽으로 맞춰줄 필요 있음


SUM

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

SUM(대상)

 


AVG

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

ex) 평균 계산 결과

SELECT AVG(COMM),
       SUM(COMM) / COUNT(EMPNO) AS AVG2,
       AVG(NVL(COMM,0)) AS AVG3
  FROM EMP;

→ AVG를 사용하면 NULL을 제외한 나머지에 대한 평균 리턴, 공식에 의해 직접 계산한 평균은 NULL 포함한 평균
→ NVL 함수를 사용하여 NULL을 0으로 치환 후 평균을 구하면 모든 인원에 대한 평균을 구할 수 있음 


MIN / MAX

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

ex) 각 컬럼의 최대, 최소

SELECT MIN(ENAME), MAX(ENAME),
       MIN(SAL), MAX(SAL),
       MIN(HIREDATE), MAX(HIREDATE)
  FROM EMP;

 

VARIANCE / STDDEV

  • 분산과 표준편차
  • 표준 편차는 분산의 루트값
  • 문법
VARIANCE(대상) / STDDEV(대상)

ex) 분산과 표준편차

SELECT VARIANCE(SAL),
       STDDEV(SAL)
  FROM EMP;

 


GROUP BY FUNCTION

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

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

SELECT DEPTNO, SUM(SAL)
  FROM EMP
 GROUP BY DEPTNO;

 

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

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

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

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY GROUPING SETS(DEPTNO, JOB);

→ GROUPING SETS 에 나열한 대상에 대해 각 GROUP BY의 결과를 출력해 줌

** UNION ALL 로 대체 가능

SELECT DEPTNO, NULL AS JOB, SUM(SAL)
  FROM EMP
 GROUP BY DEPTNO
 UNION ALL
SELECT NULL, JOB, SUM(SAL)
  FROM EMP
 GROUP BY JOB;

예제) 부서별 급여 총 합과, 업무별 급여 총 합 그리고 전체 급여의 합을 출력

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY GROUPING SETS(DEPTNO, JOB, ()); <-- ()는 전체 총합

 

2. ROLLUP(A,B)

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

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

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY ROLLUP(DEPTNO, JOB);

** UNION ALL로 대체 가능

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY DEPTNO, JOB
 UNION ALL
SELECT DEPTNO, NULL, SUM(SAL)
  FROM EMP
 GROUP BY JOB;
 UNION ALL
SELECT NULL, NULL, SUM(SAL)
  FROM EMP

 

3. CUBE(A,B)

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

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

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY CUBE(DEPTNO, JOB);

 

** UNION ALL로 대체 가능

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
 UNION ALL
SELECT DEPTNO, JOB, SUM(ALL)
  FROM EMP
 GROUP BY DEPTNO, JOB;

** GROUPING SET로 대체 가능

SELECT DEPTNO, JOB, SUM(SAL)
  FROM EMP
 GROUP BY GROUPING SET (DEPTNO, JOB, (DEPTNO, JOB), ());
반응형