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

MySQL에서 단일 행의 값 합계를 구하는 방법

MySQL에서 하나의 행(row)에 있는 여러 컬럼 값을 더해 합계를 구하고 싶다면 아래의 방법을 사용할 수 있습니다. 컬럼에 NULL 값이 있는지 없는지에 따라 사용해야 하는 문법이 달라집니다.

Case 1 – NULL 값이 없는 경우

컬럼에 NULL 값이 전혀 없다면 다음과 같이 각 컬럼을 단순히 더하면 됩니다.

SELECT yourColumnName1+yourColumnName2+yourColumnName3+.......+N AS anyVariableName FROM yourTableName;

Case 2 – NULL 값이 있는 경우

컬럼에 NULL 값이 포함되어 있다면 IFNULL() 함수를 사용하여 NULL을 0으로 바꾼 뒤 더해야 합니다. 그렇지 않으면 결과가 NULL로 반환됩니다.

SELECT IFNULL(yourColumnName1,0)+IFNULL(yourColumnName2,0)+IFNULL(yourColumnName3,0)+.............+N AS anyVariableName FROM yourTableName;

예제 테이블 생성

위 문법을 실제로 이해하기 위해 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table SumValueOfSingleRow
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> FirstValue int,
    -> SecondValue int,
    -> ThirdValue int,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.70 sec)

데이터 삽입

insert 명령으로 몇 개의 레코드를 삽입합니다. 이때 의도적으로 NULL 값도 함께 넣어 두겠습니다.

mysql> insert into SumValueOfSingleRow(FirstValue,SecondValue,ThirdValue) values(1,0,1);
Query OK, 1 row affected (0.11 sec)

mysql> insert into SumValueOfSingleRow(FirstValue,SecondValue,ThirdValue) values(1,NULL,0);
Query OK, 1 row affected (0.19 sec)

mysql> insert into SumValueOfSingleRow(FirstValue,SecondValue,ThirdValue) values(NULL,NULL,NULL);
Query OK, 1 row affected (0.09 sec)

저장된 데이터 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from SumValueOfSingleRow;

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

+----+------------+-------------+------------+
| Id | FirstValue | SecondValue | ThirdValue |
+----+------------+-------------+------------+
|  1 |          1 |           0 |          1 |
|  2 |          1 |        NULL |          0 |
|  3 |       NULL |        NULL |       NULL |
+----+------------+-------------+------------+
3 rows in set (0.00 sec)

Case 1 실행 결과 – NULL 처리 실패

위 출력 결과를 보면 NULL 값이 포함된 행이 있습니다. 이 상태에서 Case 1 방식을 적용하면 올바른 결과를 얻을 수 없습니다. 직접 확인해 보겠습니다.

mysql> select FirstValue+SecondValue+ThirdValue as SingleRowSum from SumValueOfSingleRow;

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

+--------------+
| SingleRowSum |
+--------------+
|            2 |
|         NULL |
|         NULL |
+--------------+
3 rows in set (0.06 sec)

출력 결과를 보면 NULL 값이 포함된 행은 합계가 정상적으로 계산되지 않고 NULL로 반환된 것을 알 수 있습니다. 즉, Case 1 방식은 NULL 값을 처리하지 못합니다.

Case 2 실행 결과 – NULL 처리 성공

이번에는 IFNULL() 함수를 사용한 Case 2 방식으로 동일한 조회를 수행해 보겠습니다.

mysql> select ifnull(FirstValue,0)+ifnull(SecondValue,0)+ifnull(ThirdValue,0) as SingleRowSum from SumValueOfSingleRow;

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

+--------------+
| SingleRowSum |
+--------------+
|            2 |
|            1 |
|            0 |
+--------------+
3 rows in set (0.06 sec)

이처럼 IFNULL() 함수로 NULL을 0으로 치환하면 NULL이 포함된 행도 정상적으로 합계가 계산됩니다. 따라서 컬럼에 NULL 값이 들어갈 가능성이 있다면 반드시 Case 2 방식을 사용하는 것이 안전합니다.