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

MySQL에서 각 행의 더 큰 값을 가진 열 값 합계 구하는 방법

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 함수 내부에 배치하면, 별도의 서브쿼리나 임시 테이블 없이도 한 번의 쿼리로 각 행의 최댓값 합계를 손쉽게 계산할 수 있습니다.