MySQL에서 두 개의 숫자 열(X, Y)이 있을 때, 각 행마다 더 큰 값을 선택한 뒤 그 값들의 합계를 구하고 싶다면 CASE 문과 SUM 함수를 함께 사용하면 됩니다. CASE 문 안에 조건을 설정하여 각 행에서 조건에 맞는 값을 반환하고, 이를 SUM으로 집계하는 방식입니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> X int,
-> Y int
-> );
Query OK, 0 rows affected (0.57 sec)
2단계: 데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values(20,30);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(40,15);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(80,85);
Query OK, 1 row affected (0.13 sec)
3단계: 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+------+ | X | Y | +------+------+ | 20 | 30 | | 40 | 15 | | 80 | 85 | +------+------+ 3 rows in set (0.00 sec)
4단계: 각 행의 최댓값 합계 구하기
다음은 각 행에서 X와 Y 중 더 큰 값을 선택한 후, 그 값들의 합계를 구하는 쿼리입니다.
mysql> SELECT SUM(CASE WHEN X > Y THEN X ELSE Y END) from DemoTable;
실행 결과는 다음과 같습니다.
+----------------------------------------+ | SUM(CASE WHEN X > Y THEN X ELSE Y END) | +----------------------------------------+ | 155 | +----------------------------------------+ 1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 어떻게 작동하는지 살펴보겠습니다.
- 첫 번째 행(20, 30): X(20)가 Y(30)보다 작으므로 Y인 30이 선택됩니다.
- 두 번째 행(40, 15): X(40)가 Y(15)보다 크므로 X인 40이 선택됩니다.
- 세 번째 행(80, 85): X(80)가 Y(85)보다 작으므로 Y인 85가 선택됩니다.
따라서 최종 합계는 30 + 40 + 85 = 155가 됩니다. 이처럼 CASE WHEN 조건문을 SUM 함수 내부에 배치하면, 별도의 서브쿼리나 임시 테이블 없이도 한 번의 쿼리로 각 행의 최댓값 합계를 손쉽게 계산할 수 있습니다.