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

단일 MySQL 쿼리에서 조건에 따라 SUM(합계)과 차감 연산을 함께 수행하는 방법

개요

MySQL에서 하나의 컬럼에 대해 상태 값에 따라 합계(SUM)와 차감(SUBTRACTION)을 동시에 처리해야 하는 경우가 있습니다. 이럴 때 CASE 문을 활용하면 단일 쿼리로 조건부 집계를 손쉽게 구현할 수 있습니다. 조건에 따라 값을 그대로 더하거나 음수로 변환하여 빼는 방식입니다.

이번 글에서는 예제 테이블을 만들고 데이터를 삽입한 뒤, CASE 문을 사용해 조건별 합계와 차감을 한 번의 쿼리로 처리하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 Status와 Amount 두 개의 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable866(
    Status varchar(100),
    Amount int
);
Query OK, 0 rows affected (0.63 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable866 values('ACTIVE',50);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable866 values('INACTIVE',70);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable866 values('INACTIVE',20);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable866 values('ACTIVE',100);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable866 values('ACTIVE',200);
Query OK, 1 row affected (0.11 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable866;

실행 결과는 다음과 같습니다.

+----------+--------+
| Status | Amount |
+----------+--------+
| ACTIVE | 50 |
| INACTIVE | 70 |
| INACTIVE | 20 |
| ACTIVE | 100 |
| ACTIVE | 200 |
+----------+--------+
5 rows in set (0.00 sec)

4. CASE 문으로 조건부 SUM/차감 쿼리 작성

이제 핵심인 쿼리를 살펴보겠습니다. CASE 문 안에서 Status가 'ACTIVE'면 Amount를 그대로 반환하고, 'INACTIVE'면 -Amount(음수)를 반환합니다. 이렇게 하면 SUM 함수가 ACTIVE 금액은 더하고 INACTIVE 금액은 자동으로 빼게 됩니다.

mysql> select sum(CASE WHEN Status = 'ACTIVE' then Amount
    WHEN Status = 'INACTIVE' then -Amount
    END) AS RemainingAmount
    from DemoTable866;

실행 결과는 다음과 같습니다.

+-----------------+
| RemainingAmount |
+-----------------+
| 260 |
+-----------------+
1 row in set (0.06 sec)

결과 분석

결과값 260은 다음과 같이 계산된 것입니다.

  • ACTIVE 합계: 50 + 100 + 200 = 350
  • INACTIVE 합계: 70 + 20 = 90
  • 최종 잔액(RemainingAmount): 350 − 90 = 260

마무리

이처럼 CASE 문과 SUM 함수를 조합하면 별도의 서브쿼리나 여러 번의 쿼리 실행 없이, 단일 MySQL 쿼리만으로 조건에 따른 합계와 차감 연산을 한 번에 처리할 수 있습니다. 회계 잔액 계산, 포인트 적립/차감 집계 등 실무에서 다양하게 활용할 수 있는 유용한 패턴이니 꼭 기억해 두시기 바랍니다.