MySQL 테이블에서 전체 행이 아닌 특정 행들만 골라서 합계를 구해야 하는 경우가 종종 있습니다. 이럴 때는 집계 함수인 SUM()과 WHERE 절, 그리고 IN 연산자를 함께 사용하면 간단하게 해결할 수 있습니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Amount int
);
Query OK, 0 rows affected (0.65 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(Amount) values(400); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable(Amount) values(10); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(Amount) values(50); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(Amount) values(500); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Amount) values(80); Query OK, 1 row affected (0.09 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+--------+ | Id | Amount | +----+--------+ | 1 | 400 | | 2 | 10 | | 3 | 50 | | 4 | 500 | | 5 | 80 | +----+--------+ 5 rows in set (0.00 sec)
4. 특정 행만 합계 구하기
이제 핵심 부분입니다. SUM() 함수에 WHERE Id IN(...) 조건을 조합하면 원하는 행만 선택하여 합계를 계산할 수 있습니다. 여기서는 Id가 1, 4, 5인 행의 합계를 구해 보겠습니다.
mysql> select sum(Amount) from DemoTable where Id in(1,4,5);
실행 결과는 다음과 같습니다.
+-------------+ | sum(Amount) | +-------------+ | 980 | +-------------+ 1 row in set (0.00 sec)
결과 분석
Id 1(400), Id 4(500), Id 5(80)의 값을 더하면 400 + 500 + 80 = 980이 됩니다. 즉, WHERE 절로 지정한 행들만 정확히 합산된 것을 확인할 수 있습니다.
추가 팁
IN대신BETWEEN을 사용하면 범위 조건으로도 합계를 구할 수 있습니다. 예:where Id between 1 and 3- 조건에 따라 해당하는 행이 하나도 없으면
SUM()은NULL을 반환합니다. 이 경우IFNULL(SUM(Amount), 0)처럼 처리하면 0으로 표시할 수 있습니다. - 별칭(alias)을 활용해 결과 컬럼명을 지정할 수도 있습니다. 예:
select sum(Amount) as TotalAmount from ...
이처럼 SUM() 함수와 WHERE IN 절을 조합하면 MySQL 테이블에서 원하는 특정 행들의 합계를 손쉽게 구할 수 있습니다.