집계 함수
집계 함수는 여러 행(Row)의 데이터를 하나의 결과로 계산하는 함수이다.
| 함수 | 설명 | 예시 |
| COUNT() | 데이터 개수 | SELECT COUNT(*) FROM emp; |
| SUM() | 합계 | SELECT SUM(salary) FROM emp; |
| AVG() | 평균 | SELECT AVG(salary) FROM emp; |
| MAX() | 최댓값 | SELECT MAX(salary) FROM emp; |
| MIN() | 최솟값 | SELECT MIN(salary) FROM emp; |
CASE
CASE는 조건에 따라 다른 값을 반환하는 조건문이다.
Java의 switch문과 비슷한 역할을 한다.
WHEN - THEN - ELSE - END 순으로 사용한다.
SELECT
CASE
WHEN id = 1 THEN '홍보'
WHEN id = 2 THEN '기획'
WHEN id = 3 THEN 'IT'
ELSE '기타'
END AS '부서명'
FROM emp;
GROUP_CONCAT()
같은 그룹의 여러 값을 하나의 문자열로 합쳐준다.
SELECT
GROUP_CONCAT(name)
FROM emp;
//김철수,이영희,박민수
GROUP BY
GROUP BY는 같은 값을 가진 데이터를 하나의 그룹으로 묶는다.
예를 들어 deptId를 기준으로 그룹을 만들면 부서별 통계를 구할 수 있다.
SELECT d.name, SUM(salary)
FROM emp e
JOIN dept d
ON e.deptId = d.id
GROUP BY deptId;
HAVING
HAVING은 그룹화된 결과를 조건으로 필터링할 때 사용한다.
WHERE와 HAVING 차이
WHERE은 GROUP BY 이전에, 행(Row) 필터링을 위해 사용하고
HAVING은 GROUP BY 이후, 그룹(Group) 필터링을 위해 사용한다.
SELECT d.name,
AVG(salary)
FROM emp e
JOIN dept d
ON e.deptId = d.id
GROUP BY deptId
HAVING AVG(salary) >= 5000;
- 평균 연봉이 5,000 이상인 부서만 조회 -
서브쿼리(Subquery)
서브쿼리는 SQL문 안에 또 다른 SQL문을 작성하는 것이다.
복잡한 조회 결과를 먼저 만든 뒤 그 결과를 다시 조회할 수 있다.
먼저 조회할 쿼리 바깥을 괄호로 묶어주고, 테이블 자리에 넣어주면 된다.
SELECT *
FROM (
SELECT d.name AS '부서명',
GROUP_CONCAT(e.name) AS '사원 목록',
AVG(salary) AS '평균 연봉',
MAX(salary) AS '최고 연봉',
MIN(salary) AS '최소 연봉',
COUNT(*) AS '사원 수'
FROM emp e
INNER JOIN dept d
ON e.deptId = d.id
GROUP BY deptId
) AS tmp
WHERE `평균 연봉` >= 5000;
- 부서별 통계를 계산하여 임시 테이블(tmp)을 만든다.
- 만들어진 결과에서 평균 연봉이 5,000 이상인 부서만 조회한다.
'데이터베이스 > MySQL' 카테고리의 다른 글
| [MySQL] 외래키(FOREIGN KEY) (0) | 2026.07.30 |
|---|---|
| [MySQL] CHAR / VARCHAR, INDEX (0) | 2026.07.30 |
| [MySQL] JOIN, LEFT JOIN, RIGHT JOIN (0) | 2026.07.29 |
| [MySQL] SELECT 심화 (0) | 2026.07.29 |
| [MySQL] 기초 명령어 (0) | 2026.07.28 |
댓글