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

MySQL 테이블에서 특정 행(전체 행이 아닌) 값의 합계 구하기

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 테이블에서 원하는 특정 행들의 합계를 손쉽게 구할 수 있습니다.