SQL

SQLD - SQL 활용 (집합 연산자, 그룹 함수)

taey 2024. 11. 16. 02:09

집합 연산자

  • SELECT 문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산
  • SELECT 문과 SELECT 문 사이에 집합 연산자 정의
  • 두 집합의 컬럼이 동일하게 구성되어야 함(각 컬럼의 데이터 타입과 순서 일치 필요)
  • 전체 집합의 데이터 타입과 컬럼명은 첫 번째 집합에 의해 결정됨

 

합집합

  • 두 집합의 총 합(전체) 출력
  • UNION과 UNION ALL 사용 가능
  1. UNION
    • 중복된 데이터는 한 번만 출력
    • 중복된 데이터를 제거하기 위해 내부적으로 정렬 수행
    • 중복된 데이터가 없을 경우는 UNION 사용 대신 UNION ALL 사용 (불필요한 정렬 발생할 수 있으므로)
  2. UNION ALL
    • 중복된 데이터도 전체 출력

 

교집합

  • 두 집합 사이에 INTERSECT
  • 두 집합의 교집합(공통으로 있는 행) 출력

 

차집합

  • 두 집합 사이에 MINUS 전달
  • 두 집합의 차집합(한 쪽 집합에만 존재하는 행) 출력
  • A-B와 B-A는 다르므로 집합의 순서 주의

 

집합 연산자 사용 시 주의 사항

  1. 두 집합의 컬럼 수 일치
  2. 두 집합의 컬럼 순서 일치
  3. 두 집합의 각 컬럼의 데이터 타입 일치
  4. 각 컬럼의 사이즈는 달라도 됨
  5. 개별 SELECT 문에 ORDER BY 전달 불가(GROUP BY 전달 가능)
    • SQL 가장 하단에서 ORDER BY는 개별 SELECT이 아닌 전체 정렬이기 때문에 가능

 


그룹 함수

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

 

COUNT

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

 

AVG

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

 

VARIANCE / STDDEV

  • 분산과 표준 편차
  • 표준 편차는 분산의 루트

 

GROUP BY FUNCTION

  • GROUP BY 절에 사용하는 함수
  • 여러 GROUP BY 결과를 동시에 출력(합집합)하는 기능
  • 그룹핑할 그룹을 정의 (전체 소계 등)
  1. GROUPING SETS(A, B, ..)
    • A별, B별 그룹 연산 결과 출력
    • 나열 순서 중요하지 않음
    • 기본 출력에 전체 총계는 출력되지 않음
    • NULL 혹은 () 사용하여 전체 총 합 출력 가능
    • UNION ALL로 대체 가능
  2. ROLLUP(A, B)
    • A별, (A, B)별, 전체 그룹 연산 결과 출력
    • 나열 대상의 순서가 중요함
    • 기본적으로 전체 총 계가 출력됨
    • UNION ALL로 대체 가능
  3. CUBE(A, B)
    • A별, B별, (A, B)별, 전체 그룹 연산 결과 출력됨
    • 그룹으로 묶을 대상의 나열 순서 중요하지 않음
    • 기본적으로 전체 총 계가 출력
    • UNION ALL, GROUPING SETS로 대체 가능