Day 39 - MySQL pt.3

haxxru log;·2026년 4월 24일
post-thumbnail

이 글은 2026년 04월 24일 작성된 글입니다.

오늘은 MySQL 11강 내용 중
GROUP BY, 집계함수, JOIN, HAVING까지 흐름을 정리했다.


1. GROUP BY와 집계 함수 흐름

집계 함수가 등장하면 단순 조회가 아니라
"데이터를 묶어서 계산"하는 단계로 넘어간다.

SELECT deptId, AVG(salary)
FROM emp
GROUP BY deptId;

흐름은 이렇게 이해하면 된다.

  • 1차 : FROM → 데이터 가져오기
  • 2차 : GROUP BY → 묶기
  • 3차 : 집계함수 → 계산

👉 즉, “테이블이 한 번 더 만들어진다”


2. 집계 함수 종류

COUNT(*)   -- 개수
SUM(salary) -- 합계
AVG(salary) -- 평균
MAX(salary) -- 최대
MIN(salary) -- 최소

이 함수들은
👉 GROUP BY랑 거의 세트라고 보면 된다


3. 문자열 가공 (실무 느낌 시작)

GROUP_CONCAT(name ORDER BY id DESC SEPARATOR ', ')
  • 여러 행 → 한 줄 문자열
  • 정렬까지 가능

그리고 이런 것도 같이 쓴다.

CONCAT(FORMAT(AVG(salary), 0), '만원')

👉 출력용 데이터 가공


4. IF / CASE

조건에 따라 값 바꾸기

SELECT IF(deptId = 1, '홍보', '기획');
SELECT CASE
WHEN deptId = 1 THEN '홍보'
WHEN deptId = 2 THEN '기획'
END;
  • IF → 간단한 조건
  • CASE → 확장형

5. JOIN (핵심 포인트)

SELECT *
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id;

여기서 진짜 중요한 건

👉 deptName이 아니라 deptId로 연결한다는 것

이유

  • 문자열은 바뀐다
  • id는 안 바뀐다

👉 DB 설계의 핵심


6. JOIN + GROUP BY

SELECT D.name,
GROUP_CONCAT(E.name),
AVG(E.salary)
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id
GROUP BY E.deptId;

이 단계부터는

👉 "데이터 분석 쿼리" 느낌


7. HAVING

HAVING AVG(salary) >= 5000

차이 정리

  • WHERE → 그룹화 전에 필터
  • HAVING → 그룹화 후 필터

👉 이거 헷갈리면 SQL 계속 막힘


8. 전체 흐름 정리

SQL 실행 순서

  1. FROM + JOIN
  2. WHERE
  3. GROUP BY
  4. 집계함수
  5. HAVING
  6. SELECT
  7. ORDER BY
  8. LIMIT

👉 작성 순서랑 다르다 (중요)


9. 핵심 포인트 한 줄 정리

오늘 내용 핵심은 이거다

  • GROUP BY = 데이터 묶기
  • 집계 함수 = 계산
  • JOIN = 테이블 연결
  • HAVING = 그룹 필터

✅ 정리

  • GROUP BY와 집계 함수는 데이터를 “묶고 계산하는 흐름”으로 이해해야 한다.
  • 문자열이 아니라 id로 테이블을 연결하는 것이 DB 설계에서 핵심이다.
  • JOIN과 GROUP BY를 함께 사용하면 실제 데이터 분석 쿼리를 만들 수 있다.
  • WHERE와 HAVING의 차이를 명확히 이해해야 쿼리를 제대로 작성할 수 있다.

0개의 댓글