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

MySQL에서 열 값에 따라 SELECT 문으로 곱셈 수행하는 방법

MySQL에서 특정 열의 값에 따라 조건적으로 곱셈을 수행하고 싶다면 CASE 문을 활용하면 됩니다. CASE 문은 조건을 평가한 뒤, 조건이 참일 때와 거짓일 때 각각 다른 값을 반환할 수 있어 이러한 상황에 매우 유용합니다.

예제 테이블 생성하기

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

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

샘플 데이터 삽입하기

insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다. 여기서는 Value2가 0인 경우와 0보다 큰 경우를 모두 포함시켰습니다.

mysql> insert into DemoTable(Value1,Value2) values(10,5);
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(Value1,Value2) values(20,0);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable(Value1,Value2) values(40,10);
Query OK, 1 row affected (0.28 sec)

mysql> insert into DemoTable(Value1,Value2) values(50,0);
Query OK, 1 row affected (0.12 sec)

테이블 전체 조회하기

select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
|  1 | 10     | 5      |
|  2 | 20     | 0      |
|  3 | 40     | 10     |
|  4 | 50     | 0      |
+----+--------+--------+
4 rows in set (0.00 sec)

CASE 문으로 조건부 곱셈 수행하기

이제 열 값에 따라 SELECT 문에서 곱셈을 수행하는 핵심 쿼리입니다. 아래 쿼리는 Value2가 0보다 크면 Value1과 Value2를 곱하고, 그렇지 않으면 0을 반환합니다.

mysql> select Value1,Value2,
   case when Value2 > 0 then Value1*Value2 else 0 end as Multiplication from DemoTable;

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

+--------+--------+----------------+
| Value1 | Value2 | Multiplication |
+--------+--------+----------------+
|     10 |      5 |             50 |
|     20 |      0 |              0 |
|     40 |     10 |            400 |
|     50 |      0 |              0 |
+--------+--------+----------------+
4 rows in set (0.00 sec)

결과 해석

출력 결과를 보면 Value2가 5나 10처럼 양수인 행은 두 값의 곱(50, 400)이 계산되어 반환된 반면, Value2가 0인 행은 곱셈 대신 0이 반환된 것을 확인할 수 있습니다.

이처럼 CASE 문을 사용하면 별도의 애플리케이션 로직 없이도 SQL 쿼리 내에서 조건에 따른 연산 처리를 손쉽게 구현할 수 있습니다. 필요에 따라 조건문 안에서 비교 연산자를 자유롭게 변경하여 다양한 비즈니스 규칙을 적용할 수 있다는 점도 기억해 두면 좋습니다.