MySQL SUM() 함수와 DISTINCT 키워드의 활용
MySQL에서 열의 중복을 제거한 고유한(distinct) 값들만 합산하고 싶다면, SUM() 함수 안에 DISTINCT 키워드와 함께 열 이름을 지정하면 됩니다. 이렇게 하면 동일한 값이 여러 번 존재하더라도 한 번만 계산에 포함됩니다.
예제 테이블 살펴보기
SUM(DISTINCT ...)의 동작 방식을 이해하기 위해 다음과 같은 레코드를 가진 employee_tbl 테이블을 예로 들어 보겠습니다.
mysql> SELECT * FROM employee_tbl; +------+------+------------+--------------------+ | id | name | work_date | daily_typing_pages | +------+------+------------+--------------------+ | 1 | John | 2007-01-24 | 250 | | 2 | Ram | 2007-05-27 | 220 | | 3 | Jack | 2007-05-06 | 170 | | 3 | Jack | 2007-04-06 | 100 | | 4 | Jill | 2007-04-06 | 220 | | 5 | Zara | 2007-06-06 | 300 | | 5 | Zara | 2007-02-06 | 350 | +------+------+------------+--------------------+ 7 rows in set (0.00 sec)
DISTINCT 키워드를 사용한 합계 계산
위 테이블에서 daily_typing_pages 열의 중복되지 않은 값들의 총합을 구하려면, 아래와 같이 SUM() 함수 내부에 DISTINCT 키워드를 사용하는 쿼리를 실행하면 됩니다.
mysql> SELECT SUM(DISTINCT daily_typing_pages)
-> FROM employee_tbl;
+-------------------------+
| SUM(daily_typing_pages) |
+-------------------------+
| 1390 |
+-------------------------+
1 row in set (0.00 sec)결과 분석
위 결과 집합을 보면 MySQL의 SUM() 함수가 DISTINCT 키워드와 함께 사용될 때 중복된 레코드를 제거하고 고유한 값만 더한다는 것을 알 수 있습니다.
실제로 전체 데이터에는 '220'이라는 값이 두 번(Ram과 Jill의 레코드) 포함되어 있지만, 결과에서는 단 한 번만 더해졌습니다. 만약 DISTINCT 없이 일반 SUM()을 사용했다면 총합은 1610(250+220+170+100+220+300+350)이 되었을 것입니다. 반면 DISTINCT를 적용하면 220이 한 번만 계산되어 최종 결과가 1390(250+220+170+100+300+350)이 됩니다.
이처럼 SUM(DISTINCT column_name) 구문은 통계 집계 시 중복 데이터로 인한 왜곡을 방지하고 싶을 때 유용하게 활용할 수 있습니다.