
COUNT 함수와 SUM 함수 모두 데이터를 집계할 때 사용한다.
그런데 사용하다보면 사용 방법이 헤갈릴 때가 있어서 정리해두려고 한다.
COUNT와 SUM의 사용 목적
- COUNT 함수 : 특정 조건을 만족하는 데이터 행의 개수를 구하는 데 사용한다.
- SUM 함수 : 특정 칼럼의 값들을 모두 더할 때 사용합니다.
실제 사용 예시
예제 테이블 생성
먼저 학생 정보를 저장할 테이블을 만들자.
CREATE TABLE students(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
score INT
);
모든 데이터를 조회하는 쿼리
SELECT * FROM students;
결과
COUNT 함수 사용
*(아스트릭)으로 COUNT
SELECT COUNT(*) FROM students;
결과
이 쿼리는 모든 행의 개수를 센다. COUNT(*)는 null 값을 포함한 모든 행을 카운팅한다.
즉, 각 행이 구분되기만 하면 카운팅 대상이 된다.
예를 들어, id가 다르다면 score나 name이 null이라도 그 행은 카운팅된다.
칼럼으로 COUNT
SELECT COUNT(score) FROM students;
결과
이 쿼리는 score 칼럼의 값을 기준으로 행의 개수를 센다.
COUNT(score)는 null 값을 제외하고 카운팅하기 때문에 score가 null인 경우 해당 행은 제외된다.
SUM 함수 사용
SELECT SUM(score) FROM students;
결과
이 쿼리는 score 칼럼의 값들을 전부 더한다.
null 값은 무시되고, 숫자 값들만 합산된다.
실수하기 쉬운 COUNT 사용법
SELECT COUNT(score IS NOT NULL) FROM students;
결과
위 쿼리는 score가 null이 아닌 경우의 개수를 세려는 의도로 작성했다.
하지만 결과는 예상과 다르게 전체 행인 7개가 반환된다.
이유는 score IS NOT NULL이 각 행에 대해 true 또는 false로 평가되고, COUNT는 이러한 논리 값을 모두 카운팅하기 때문이다.
즉, true 인 것만 세는 것이 아니라 평가되는 값들을 전부 세는 것이다.
COUNT(score)는 숫자인 값들은 전부 평가될 수 있지만, null은 평가될 수 없기 때문에 5가 나온 것이다.
올바른 null 값 제외 개수 계산법
SELECT SUM(score IS NOT NULL) FROM students;
결과
score IS NOT NULL이 true일 때 1로 평가되기 때문에 null이 아닌 행의 개수만 합산되어 결과가 나온다.
null 값의 개수를 계산하는 방법
SELECT COUNT(*)- COUNT(score) FROM students;
결과
COUNT(*)는 전체 행의 개수를, COUNT(score)는 null을 제외한 개수를 반환하므로, 두 값을 빼면 null 값의 개수를 얻을 수 있다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
window 함수 활용법(feat. group by와 다른점) (0) | 2024.12.17 |
---|---|
MySQL ONLY_FULL_GROUP_BY 이해하기 (1) | 2024.12.11 |
MySQL에서 날짜 차이 계산하는 방법 (0) | 2024.11.30 |
SQL IN절에서 NULL이 예상대로 동작하지 않는 이유 (1) | 2024.11.29 |
MySQL에서 SELECT 별칭은 GROUP BY, ORDER BY, HAVING 절에서 사용 가능하다 (0) | 2024.11.28 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!