MySQL에서 NULL 값이 있는 행의 열 곱셈 처리하기
MySQL에서 곱셈 연산을 수행할 때 피연산자 중 하나라도 NULL이면 결과는 항상 NULL이 됩니다. 이러한 문제를 해결하려면 COALESCE() 함수를 사용하여 NULL 값을 다른 값(예: 1)으로 대체하면 됩니다.
COALESCE()는 인수로 전달된 값 중 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. 따라서 COALESCE(열이름, 1)처럼 작성하면 해당 열의 값이 NULL일 때 1을 반환하게 됩니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1842
(
NumberOfItems int,
Amount int
);
Query OK, 0 rows affected (0.00 sec)
2. 데이터 삽입
insert 명령을 사용하여 테이블에 레코드를 삽입합니다. 이때 의도적으로 NULL 값을 포함한 레코드도 함께 추가합니다.
mysql> insert into DemoTable1842 values(10,40);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1842 values(20,5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1842 values(NULL,10);
Query OK, 1 row affected (0.00 sec)
3. 테이블 데이터 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1842;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------+--------+
| NumberOfItems | Amount |
+---------------+--------+
| 10 | 40 |
| 20 | 5 |
| NULL | 10 |
+---------------+--------+
3 rows in set (0.00 sec)
세 번째 행에서 NumberOfItems 열의 값이 NULL인 것을 확인할 수 있습니다.
4. COALESCE()를 사용한 곱셈 쿼리
NULL 행이 있어도 정상적인 곱셈 결과를 얻으려면 아래와 같이 COALESCE()를 적용한 쿼리를 실행합니다.
mysql> select NumberOfItems,Amount,
coalesce(NumberOfItems,1)*Amount as Total
from DemoTable1842;
실행 결과는 다음과 같습니다.
+---------------+--------+-------+
| NumberOfItems | Amount | Total |
+---------------+--------+-------+
| 10 | 40 | 400 |
| 20 | 5 | 100 |
| NULL | 10 | 10 |
+---------------+--------+-------+
3 rows in set (0.00 sec)
결과 분석
출력 결과를 보면 세 번째 행의 NumberOfItems가 NULL임에도 불구하고, COALESCE(NumberOfItems, 1)에 의해 1로 대체되어 1 × 10 = 10이라는 올바른 결과가 계산된 것을 알 수 있습니다.
만약 COALESCE()를 사용하지 않고 단순히 NumberOfItems * Amount를 계산했다면, NULL이 포함된 행의 결과는 NULL이 되었을 것입니다. 이처럼 COALESCE() 함수를 활용하면 NULL 값으로 인한 연산 오류나 예상치 못한 결과를 손쉽게 방지할 수 있습니다.