MySQL에서 조건을 판단하면서 동시에 수학 연산을 처리해야 하는 경우가 있습니다. 이럴 때 CASE 문을 활용하면 IF와 유사한 조건 분기 로직을 손쉽게 구현할 수 있으며, ELSE 절에서도 다양한 연산이 가능합니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FruitName varchar(100),
FruitPrice int
);
Query OK, 0 rows affected (0.26 sec)샘플 데이터 삽입하기
INSERT 명령을 사용해 과일 이름과 가격 데이터를 입력합니다.
mysql> insert into DemoTable(FruitName,FruitPrice) values('Orange',250);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Banana',100);
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Apple',150);
Query OK, 1 row affected (0.05 sec)
mysql> insert into DemoTable(FruitName,FruitPrice) values('Pomegranate',200);
Query OK, 1 row affected (0.10 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-------------+------------+ | Id | FruitName | FruitPrice | +----+-------------+------------+ | 1 | Orange | 250 | | 2 | Banana | 100 | | 3 | Apple | 150 | | 4 | Pomegranate | 200 | +----+-------------+------------+ 4 rows in set (0.19 sec)
CASE 문으로 조건부 수학 연산 적용하기
이제 CASE 문을 사용해 특정 조건일 때만 나눗셈 연산을 수행하고, 그 외의 경우에는 원래 값을 그대로 반환하는 쿼리를 작성해 보겠습니다. 아래 예제에서는 과일 이름이 'Orange'인 경우 가격을 5로 나누고, 나머지 과일은 기존 가격을 그대로 출력합니다.
mysql> select Id,FruitName,FruitPrice,
case
when FruitName='Orange'
then FruitPrice/5
else FruitPrice
end as OriginalPrice
from DemoTable;실행 결과는 다음과 같습니다.
+----+-------------+------------+---------------+ | Id | FruitName | FruitPrice | OriginalPrice | +----+-------------+------------+---------------+ | 1 | Orange | 250 | 50.0000 | | 2 | Banana | 100 | 100 | | 3 | Apple | 150 | 150 | | 4 | Pomegranate | 200 | 200 | +----+-------------+------------+---------------+ 4 rows in set (0.00 sec)
결과 해석
위 출력 결과를 보면 'Orange' 행의 경우 WHEN 조건이 참이 되어 FruitPrice/5, 즉 250 ÷ 5 = 50이라는 계산 결과가 반환된 것을 확인할 수 있습니다. 반면 'Banana', 'Apple', 'Pomegranate'는 조건에 해당하지 않아 ELSE 절이 실행되며 원래 가격인 100, 150, 200이 그대로 출력됩니다.
이처럼 MySQL의 CASE 문은 THEN과 ELSE 절 모두에서 산술 연산을 자유롭게 사용할 수 있어, 단순한 값 비교를 넘어 조건 기반의 복잡한 계산 로직도 SQL 안에서 깔끔하게 처리할 수 있다는 장점이 있습니다.