su-tudy 님의 블로그
COUNT, SUM, AVG, MAX, MIN 본문
𖤐 여러 데이터를 계산하기
집계함수는 여러 행의 데이터를 하나의 값으로 요약해 주는 함수다. 전체 건수, 합계, 평균, 최댓값, 최솟값 같은 걸 구할 때 사용하며 다음 편에서 배울 GROUP BY와 함께 쓰면 더 강력해진다.
𖤐 정리 노트
✧ 집계함수
집계함수는 SELECT 구문에서 사용하며 여러 행을 하나의 결과값으로 반환한다.
SELECT 집계함수(column_name)
FROM table_name
WHERE condition;
✧ COUNT - 행 개수
조건에 맞는 행의 수를 반환한다.
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
▸ COUNT(*) vs COUNT(column)
둘의 차이가 중요하다.
-- COUNT(*): NULL 포함 전체 행 수 반환
SELECT COUNT(*) FROM users;
-- COUNT(column): 해당 컬럼에서 NULL을 제외한 행 수 반환
SELECT COUNT(phone) FROM users;
| COUNT(*) vs COUNT(column) | NULL 포함 여부 | 용도 |
| COUNT(*) | 포함 | 전체 행 수 셀 때 |
| COUNT(column) | 제외 | 특정 컬럼에 값이 있는 행 수 셀 때 |
-- 중복 제거 후 개수
SELECT COUNT(DISTINCT city) FROM users;
✧ SUM - 합계
숫자 컬럼의 총합을 반환한다. NULL은 무시한다.
SELECT SUM(salary)
FROM employees;
✧ AVG - 평균
숫자 컬럼의 평균값을 반환한다. NULL은 무시하고 계산한다.
SELECT AVG(salary)
FROM employees;
✧ ROUND() - 소수점 반올림
AVG는 소수점이 길게 나올 수 있어서 ROUND()와 같이 쓰는 경우가 많다.
-- 소수점 둘째 자리까지 반올림
SELECT ROUND(AVG(salary), 2)
FROM employees;
-- 정수로 반올림
SELECT ROUND(AVG(salary), 0)
FROM employees;
✧ MAX - 최댓값
선택한 컬럼에서 가장 큰 값을 반환한다. 문자열이면 사전 순으로 가장 뒤에 오는 값을 반환한다.
SELECT MAX(salary)
FROM employees;
✧ MIN - 최솟값
선택한 컬럼에서 가장 작은 값을 반환한다. 문자열이면 사전 순으로 가장 앞에 오는 값을 반환한다.
SELECT MIN(salary)
FROM employees;
✧ 여러 집계함수 한 번에 사용
SELECT
COUNT(*) AS 전체인원,
ROUND(AVG(salary), 0) AS 평균급여,
SUM(salary) AS 급여합계,
MAX(salary) AS 최고급여,
MIN(salary) AS 최저급여
FROM employees;
𖤐 체크포인트
🚨 주의 — AVG에서 NULL 처리 주의
NULL을 어떻게 처리하느냐에 따라 결과가 달라지니 주의해야 한다.
데이터: 10, 20, NULL, 30SELECT AVG(score) FROM test; → 결과: 20 (NULL 제외, 10+20+30 / 3)
NULL을 0으로 처리하고 싶다면SELECT AVG(IFNULL(score, 0)) FROM test; → 결과: 15 (10+20+0+30 / 4)
🚨 오류 — 집계함수는 WHERE절에서 사용 불가
집계함수는 HAVING에서 써야 한다.SELECT * FROM employees WHERE AVG(salary) > 300; → 이렇게 쓰면 에러
𖤐 오늘의 한 줄 요약
COUNT는 행 수, SUM은 합계, AVG는 평균, MAX/MIN은 최대/최소. COUNT(*)는 NULL 포함, COUNT(column)은 NULL 제외. AVG는 ROUND()와 함께 쓰고, NULL 처리 방식에 따라 결과가 달라질 수 있으니 주의하자.
'DBMS > Part 2. DML' 카테고리의 다른 글
| JOIN (INNER, LEFT, RIGHT, OUTER) (0) | 2024.10.11 |
|---|---|
| GROUP BY와 HAVING (0) | 2024.09.24 |
| ORDER BY와 LIMIT (0) | 2024.09.22 |
| WHERE와 연산자 (0) | 2024.09.20 |
| SELECT, INSERT, UPDATE, DELETE (0) | 2024.09.17 |