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

MySQL에서 SELECT 필드마다 조건 적용하기: WHERE 절 대신 CASE 문 활용법

MySQL에서 SELECT 필드별 조건 처리 방법

MySQL에서 집계 함수 내부의 특정 필드에 조건을 적용해야 할 때는 WHERE 절 대신 CASE 문을 사용하는 것이 효과적입니다. WHERE 절은 행 전체를 필터링하지만, CASE 문은 SELECT 목록 안에서 각 필드(열)마다 개별적인 조건 로직을 적용할 수 있기 때문입니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 세 개의 정수형 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable1988
    (
    Value1 int,
    Value2 int,
    Price int
    );
Query OK, 0 rows affected (0.64 sec)

2단계: 샘플 데이터 삽입

INSERT 명령어를 사용해 테스트용 레코드를 추가합니다.

mysql> insert into DemoTable1988 values(10,7,500);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1988 values(7,9,400);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1988 values(8,7,200);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1988 values(7,4,300);
Query OK, 1 row affected (0.16 sec)

3단계: 전체 데이터 확인

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

mysql> select * from DemoTable1988;

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

+--------+--------+-------+
| Value1 | Value2 | Price |
+--------+--------+-------+
|     10 |       7 |   500 |
|       7 |       9 |   400 |
|       8 |       7 |   200 |
|       7 |       4 |   300 |
+--------+--------+-------+
4 rows in set (0.00 sec)

4단계: CASE 문으로 필드별 조건 쿼리 작성

이제 핵심 부분입니다. 아래 쿼리는 SUM 함수와 CASE 문을 결합하여, Value2가 7인 행의 Price 합계에서 Value1이 7인 행의 Price 합계를 뺀 결과를 계산합니다.

mysql> select sum( case when Value2=7 then Price else 0 end)-
    sum( case when Value1=7 then Price else 0 end) as Result
    from DemoTable1988;

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

+--------+
| Result |
+--------+
|       0 |
+--------+
1 row in set (0.23 sec)

결과 해석

위 쿼리의 계산 과정은 다음과 같습니다.

  • 첫 번째 SUM: Value2 = 7인 행(500, 200)의 Price 합계 → 700
  • 두 번째 SUM: Value1 = 7인 행(400, 300)의 Price 합계 → 700
  • 최종 결과: 700 − 700 = 0

이처럼 CASE 문을 활용하면 하나의 쿼리 안에서 여러 필드에 서로 다른 조건을 독립적으로 적용할 수 있어, WHERE 절만으로는 구현하기 어려운 복잡한 조건부 집계도 손쉽게 처리할 수 있습니다.