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

MySQL에서 필드 값이 0보다 클 때만 1을 빼는 방법 (CASE 문 활용)

MySQL에서 필드 값이 0보다 클 때만 1을 감소시키고, 0인 행은 그대로 두고 싶은 경우 UPDATE 명령과 CASE 문을 조합하면 간단하게 해결할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value int
);
Query OK, 0 rows affected (1.44 sec)

2단계: 레코드 삽입

insert 명령으로 테이블에 샘플 데이터를 입력합니다. 이때 값이 0인 레코드도 의도적으로 포함시켰습니다.

mysql> insert into DemoTable(Value) values(100);
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable(Value) values(0);
Query OK, 1 row affected (4.16 sec)
mysql> insert into DemoTable(Value) values(104);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Value) values(0);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Value) values(5);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Value) values(10);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(Value) values(0);
Query OK, 1 row affected (0.18 sec)

3단계: 데이터 조회

select 명령으로 테이블의 현재 상태를 확인합니다.

mysql> select *from DemoTable;

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

+----+-------+
| Id | Value |
+----+-------+
| 1  | 100   |
| 2  | 0     |
| 3  | 104   |
| 4  | 0     |
| 5  | 5     |
| 6  | 10    |
| 7  | 0     |
+----+-------+
7 rows in set (0.00 sec)

4단계: 조건부 업데이트 실행

CASE 문을 사용해 필드 값이 0보다 크면 1을 빼고, 그렇지 않으면 기존 값을 그대로 유지하도록 조건을 설정합니다.

mysql> update DemoTable set Value=CASE WHEN Value > 0 THEN Value-1 ELSE 0 END;
Query OK, 4 rows affected (0.25 sec)
Rows matched: 7 Changed: 4 Warnings: 0

실행 결과를 보면 전체 7개 행 중 실제로 값이 변경된 행은 4개입니다. 값이 0이었던 행은 조건에 해당하지 않아 그대로 유지됩니다.

5단계: 결과 확인

업데이트 후 테이블을 다시 조회해 보겠습니다.

mysql> select *from DemoTable;

결과는 다음과 같습니다.

+----+-------+
| Id | Value |
+----+-------+
| 1  | 99    |
| 2  | 0     |
| 3  | 103   |
| 4  | 0     |
| 5  | 4     |
| 6  | 9     |
| 7  | 0     |
+----+-------+
7 rows in set (0.00 sec)

정리

CASE WHEN Value > 0 THEN Value-1 ELSE 0 END 구문은 필드 값이 양수일 때만 1을 차감하는 안전한 방식입니다. 이 패턴은 재고 수량 감소, 포인트 차감처럼 값이 음수가 되어서는 안 되는 상황에서 특히 유용하게 활용할 수 있습니다.