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

MySQL 저장 프로시저로 IF 조건을 활용한 SUM 합계 쿼리 작성하기

MySQL에서 SUM()은 대표적인 집계 함수(Aggregate Function) 중 하나입니다. 이 함수는 IF 조건문과 함께 사용하면 특정 조건에 맞는 데이터만 선택적으로 합산할 수 있어 매우 유용합니다. 이번 글에서는 저장 프로시저(Stored Procedure)와 결합하여 IF 조건 기반의 SUM 쿼리를 실습해 보겠습니다.

1. 테스트 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다. 결제 방식(ModeOfPayment)과 금액(Amount) 두 개의 컬럼으로 구성된 간단한 테이블입니다.

mysql> create table SumWithIfCondition
   -> (
   -> ModeOfPayment varchar(100)
   -> ,
   -> Amount int
   -> );
Query OK, 0 rows affected (1.60 sec)

2. 샘플 데이터 입력

INSERT 명령어를 사용하여 오프라인(Offline)과 온라인(Online) 결제 데이터를 각각 입력합니다.

mysql> insert into SumWithIfCondition values('Offline',10);
Query OK, 1 row affected (0.21 sec)

mysql> insert into SumWithIfCondition values('Online',100);
Query OK, 1 row affected (0.16 sec)

mysql> insert into SumWithIfCondition values('Offline',20);
Query OK, 1 row affected (0.13 sec)

mysql> insert into SumWithIfCondition values('Online',200);
Query OK, 1 row affected (0.16 sec)

mysql> insert into SumWithIfCondition values('Offline',30);
Query OK, 1 row affected (0.11 sec)

mysql> insert into SumWithIfCondition values('Online',300);
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 조회

SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from SumWithIfCondition;

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

+---------------+--------+
| ModeOfPayment | Amount |
+---------------+--------+
| Offline       |     10 |
| Online        |    100 |
| Offline       |     20 |
| Online        |    200 |
| Offline       |     30 |
| Online        |    300 |
+---------------+--------+
6 rows in set (0.00 sec)

4. 저장 프로시저 생성

이제 문자열 파라미터 하나를 받아 해당 결제 방식의 합계를 반환하는 저장 프로시저를 만들어 보겠습니다. 핵심은 IF 조건식으로, ModeOfPayment 컬럼 값이 파라미터로 전달된 값과 일치하면 Amount를 더하고, 일치하지 않으면 0을 반환하도록 처리합니다.

mysql> delimiter //

mysql> create procedure sp_GetSumWithPaymentMode11(PaymentMode varchar(200))
-> begin
-> select PaymentMode,sum(if(ModeOfPayment=PaymentMode,Amount,0)) as TotalAmount from SumWithIfCondition;
-> end //
Query OK, 0 rows affected (0.32 sec)

mysql> delimiter ;

프로시저 생성이 완료되면 CALL 명령어를 통해 언제든지 호출하여 사용할 수 있습니다.

5. 저장 프로시저 실행 결과 확인

Case 1 — 'Online' 결제 방식 조회

'Online'을 파라미터로 전달하여 프로시저를 호출합니다.

mysql> call sp_GetSumWithPaymentMode11('Online');

온라인 결제 금액(100 + 200 + 300)의 합계가 정상적으로 출력됩니다.

+-------------+-------------+
| PaymentMode | TotalAmount |
+-------------+-------------+
| Online      |         600 |
+-------------+-------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Case 2 — 'Offline' 결제 방식 조회

이번에는 'Offline'을 파라미터로 전달해 봅니다.

mysql> call sp_GetSumWithPaymentMode11('Offline');

오프라인 결제 금액(10 + 20 + 30)의 합계인 60이 반환됩니다.

+-------------+-------------+
| PaymentMode | TotalAmount |
+-------------+-------------+
| Offline     |          60 |
+-------------+-------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

정리

이처럼 MySQL에서는 SUM() 함수 내부에 IF 조건을 조합하면 WHERE 절 없이도 조건별 합계를 한 번의 쿼리로 계산할 수 있습니다. 여기에 저장 프로시저를 활용하면 파라미터만 변경해서 다양한 조건의 집계 결과를 손쉽게 재사용할 수 있어, 반복적인 통계 조회 업무에서 코드의 가독성과 유지보수성을 크게 높일 수 있습니다.