Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SUM() 함수에서 DISTINCT 키워드로 중복 값을 제외하고 합계 구하는 방법

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) 구문은 통계 집계 시 중복 데이터로 인한 왜곡을 방지하고 싶을 때 유용하게 활용할 수 있습니다.