
이 글은 2026년 04월 24일 작성된 글입니다.
오늘은 MySQL 11강 내용 중
GROUP BY, 집계함수, JOIN, HAVING까지 흐름을 정리했다.
집계 함수가 등장하면 단순 조회가 아니라
"데이터를 묶어서 계산"하는 단계로 넘어간다.
SELECT deptId, AVG(salary)
FROM emp
GROUP BY deptId;
흐름은 이렇게 이해하면 된다.
👉 즉, “테이블이 한 번 더 만들어진다”
COUNT(*) -- 개수
SUM(salary) -- 합계
AVG(salary) -- 평균
MAX(salary) -- 최대
MIN(salary) -- 최소
이 함수들은
👉 GROUP BY랑 거의 세트라고 보면 된다
GROUP_CONCAT(name ORDER BY id DESC SEPARATOR ', ')
그리고 이런 것도 같이 쓴다.
CONCAT(FORMAT(AVG(salary), 0), '만원')
👉 출력용 데이터 가공
조건에 따라 값 바꾸기
SELECT IF(deptId = 1, '홍보', '기획');
SELECT CASE
WHEN deptId = 1 THEN '홍보'
WHEN deptId = 2 THEN '기획'
END;
SELECT *
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id;
여기서 진짜 중요한 건
👉 deptName이 아니라 deptId로 연결한다는 것
이유
👉 DB 설계의 핵심
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;
이 단계부터는
👉 "데이터 분석 쿼리" 느낌
HAVING AVG(salary) >= 5000
차이 정리
👉 이거 헷갈리면 SQL 계속 막힘
SQL 실행 순서
👉 작성 순서랑 다르다 (중요)
오늘 내용 핵심은 이거다