✅ 기본 개념

엑셀 함수처럼 데이터를 집계하는 함수들입니다.
SELECT 구문에서 자주 사용되며, 그룹화(GROUP BY)와도 함께 사용됩니다.


1️⃣ COUNT - 행의 수 세기

SELECT COUNT(*) FROM players;
  • 전체 행의 개수 반환
  • COUNT(*)는 NULL 포함 모든 행을 셈
  • *을 사용할 수 있는 집계 함수는 COUNT만 가능
SELECT COUNT(birthYear) FROM players;
  • NULL 제외하고 birthYear이 존재하는 행만 셈
  • 결과가 COUNT(*)보다 작을 수 있음

2️⃣ DISTINCT - 중복 제거

SELECT DISTINCT birthCity FROM players;
  • 중복된 도시명 제거 후 반환
SELECT COUNT(DISTINCT birthCity) FROM players;
  • 중복 제거된 도시 수를 세는 올바른 방식
  • SELECT DISTINCT COUNT(birthCity)는 의도와 다르게 동작함!
SELECT DISTINCT birthYear, birthMonth, birthDay
FROM players
ORDER BY birthYear;
  • 세 개 열의 조합이 완전히 같을 때만 중복으로 판단

3️⃣ SUM & AVG - 합계와 평균

SELECT SUM(weight) FROM players;
SELECT AVG(weight) FROM players;
  • SUM: 전체 weight의 합계
  • AVG: NULL 제외 평균값
-- NULL은 0으로 처리하여 평균 계산
SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM players;
  • NULL을 0으로 간주하면 평균값이 낮아질 수 있음

4️⃣ MIN & MAX - 최소/최대값

SELECT MIN(weight), MAX(weight)
FROM players;
  • 가장 작은, 가장 큰 값을 반환
  • 문자열, 날짜에도 사용 가능!
SELECT MIN(debut), MAX(debut)
FROM players;
  • 선수들의 가장 이른/늦은 데뷔 날짜를 구할 수도 있음

📌 정리 표

함수설명NULL 처리
COUNT(*)전체 행 수포함
COUNT(col)해당 열의 NULL 제외한 개수제외
SUM(col)값의 합제외
AVG(col)평균제외
MIN(col)가장 작은 값제외
MAX(col)가장 큰 값제외
DISTINCT중복 제거해당 함수와 함께 사용해야 효과적

🛠 실전 응용 예시

💡 태어난 도시 수 (중복 제거 후)

SELECT COUNT(DISTINCT birthCity)
FROM players;

💡 NULL을 0으로 간주한 평균 체중

SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM players;

💡 가장 오래된 데뷔와 가장 최근 은퇴

SELECT MIN(debut), MAX(finalGame)
FROM players;

🧠 기억할 것

  • 집계 함수는 기본적으로 NULL 값을 무시한다.
  • DISTINCT집계 함수 내부에서 사용해야 의미가 있다.
  • MIN, MAX는 숫자뿐만 아니라 날짜, 문자열에도 적용 가능하다.
  • CASE와 결합하여 조건부 집계도 가능하다.

🎯 예제: 평균을 구하되 NULL은 0으로 대체

SELECT AVG(CASE
             WHEN weight IS NULL THEN 0
             ELSE weight
           END) AS adjustedAvgWeight
FROM players;

profile
李家네_공부방

0개의 댓글