su-tudy 님의 블로그

COUNT, SUM, AVG, MAX, MIN 본문

DBMS/Part 2. DML

COUNT, SUM, AVG, MAX, MIN

su-tudy 2024. 9. 23. 21:42

 

𖤐 여러 데이터를 계산하기

 

집계함수는 여러 행의 데이터를 하나의 값으로 요약해 주는 함수다. 전체 건수, 합계, 평균, 최댓값, 최솟값 같은 걸 구할 때 사용하며 다음 편에서 배울 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;
💡 NULL을 무시한다는 건 NULL이 있는 행을 아예 빼고 평균을 낸다는 뜻이다. 전체 행 기준 평균을 내고 싶다면 NULL을 0으로 처리한 뒤 계산해야 한다.

 


 

✧ 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, 30
SELECT 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