Home
home
🏡 홈
home

[SQL] SUM, COUNT 비교

분류
개발지식
태그
SQL
작성자
작성일
2024/06/09 09:53
SQL에서 SUM과 COUNT는 둘 다 집계 함수이지만, 서로 다른 목적을 가지고 있습니다. 그럼에도 어떤 걸 사용해야 될지 고민하는 케이스가 있습니다. 둘의 차이점을 간단히 알아보고 혼동될 수 있는 케이스를 간단한 예시와 함께 알아봅시다.

SUM과 COUNT의 차이점

SUM: 숫자 열의 합계를 계산.
COUNT: 행의 개수를 계산.

올바른 사용법

1.
SUM 함수 사용 시 주의점:
SUM 함수는 반드시 숫자 열을 대상으로 해야 합니다.
NULL 값은 자동으로 무시됩니다.
2.
COUNT 함수 사용 시 주의점:
COUNT(*)는 테이블의 모든 행을 셉니다.
COUNT(column_name)은 특정 열의 NULL이 아닌 값들만 셉니다.
COUNT(DISTINCT column_name)은 중복을 제거한 후 셉니다.
일단, 위의 내용을 요약 해보았을 때, COUNT,SUM의 차이점과 용도는 명확하다.
하지만, 실무에서는 쿼리에 복잡도에 따라 혼동되는 케이스가 있기 마련이다.
아래의 예시로 비교해보도록 하자

예제 테이블

visit_logs 테이블: 방문 기록을 저장하는 테이블, 각 행은 개별 방문자를 나타냅니다. 추가로, 방문 유형(visit_type) 필드를 포함하여 방문자가 신규 방문자(1)인지 기존 방문자(0)인지를 나타냅니다.
+----+------------+---------------------+------------+ | id | visitor_id | visit_time | visit_type | +----+------------+---------------------+------------+ | 1 | 1 | 2024-06-01 09:00:00 | 1 | | 2 | 2 | 2024-06-01 09:15:00 | 0 | | 3 | 1 | 2024-06-01 10:00:00 | 1 | | 4 | 3 | 2024-06-01 10:30:00 | 0 | | 5 | 1 | 2024-06-01 11:00:00 | 1 | | 6 | 4 | 2024-06-01 12:00:00 | 0 | | 7 | 2 | 2024-06-01 12:30:00 | 0 | +----+------------+---------------------+------------+
YAML
복사

문제 상황

특정 시간대의 신규 방문자의 수를 계산해야 합니다. 이때 SUMCOUNT를 사용하는 방법을 비교합니다.
실행 쿼리문 : 오전 신규방문자수 집계
SELECT 'Morning' AS time_period, SUM(IF(visit_type = 1, 1, 0)) AS sum_new_visitor_count, COUNT(IF(visit_type = 1, 1, NULL)) AS count_new_visitor_count FROM visit_logs WHERE visit_time BETWEEN '2024-06-01 09:00:00' AND '2024-06-01 11:59:59'
SQL
복사
결과
+------------+---------------------+----------------------+ | time_period| sum_new_visitor_count| count_new_visitor_count| +------------+---------------------+----------------------+ | Morning | 3 | 3 | +------------+---------------------+----------------------+
Diff
복사
위의 쿼리문은 SUM, COUNT 둘다 동일한 결과를 가질 수 있다.
여기서 어떤 쿼리문을 사용해야 올바른 방법일까 ?
두 방법 중 어떤 것이 선호되는지는 팀의 코딩 스타일이나 쿼리의 복잡성에 따라 다를 수 있지만,
둘 다 SQL 표준에 맞고 효율적으로 작동한다.

개인적 의견

위의 예시에서 굳이 실무 경험으로 개인적 의견을 말해보자면
COUNT 의 1은 참을 뜻하고, SUM 에서는 숫자1일 뜻하므로
조건문에 대해 SUM 이 가독성이 더 좋다고 생각된다.
나중에 쿼리문을 잊어버린 상태로 다시 봤을 때나, 다른 팀원들이 수정을 위해 보게 되었을 때 가독성은 중요한 작용을 한다고 생각됩니다.
다만, 중복 값 제거 후 집계를 낼 때는 COUNT 가 더 좋다고 생각하는 편이다.
(어디까지나 개인적 의견이므로 참고만 해주세요.)