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

MySQL에서 두 열의 최댓값(GREATEST) 구하기 – NULL 값 처리 방법

MySQL에서 두 열의 최댓값 구하기 – NULL 값 처리하기

MySQL에서 GREATEST() 함수를 사용해 두 열 중 더 큰 값을 구할 때, 한쪽 열에 NULL이 포함되어 있으면 비교 결과 역시 NULL로 반환됩니다. 이 문제를 해결하려면 IF() 함수를 활용해 NULL 값을 0으로 치환한 뒤 비교하면 됩니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
   -> (
   -> Value1 int,
   -> Value2 int
   -> );
Query OK, 0 rows affected (0.77 sec)

INSERT 명령으로 테이블에 레코드를 삽입합니다. 이때 의도적으로 NULL 값도 함께 넣습니다.

mysql> insert into DemoTable values(78,89);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(19,null);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(null,0);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values(null,95);
Query OK, 1 row affected (0.15 sec)

SELECT 문으로 테이블의 전체 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     78 |     89 |
|     19 |   NULL |
|   NULL |      0 |
|   NULL |     95 |
+--------+--------+
4 rows in set (0.00 sec)

이제 두 열에서 '최댓값'을 구하는 쿼리입니다. GREATEST() 함수 안에서 IF()로 각 열의 NULL 여부를 검사하고, NULL이면 0으로 대체합니다.

mysql> select greatest(if(Value1 is null,0,Value1),if(Value2 is null,0,Value2)) from DemoTable;

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

+-------------------------------------------------------------------+
| greatest(if(Value1 is null,0,Value1),if(Value2 is null,0,Value2)) |
+-------------------------------------------------------------------+
|                                                                89 |
|                                                                19 |
|                                                                 0 |
|                                                                95 |
+-------------------------------------------------------------------+
4 rows in set (0.00 sec)

위 출력을 보면 각 행마다 Value1과 Value2 중 더 큰 값이 정상적으로 반환된 것을 확인할 수 있습니다. 참고로 COALESCE(Value1, 0) 방식을 사용하면 동일한 결과를 더 간결한 코드로 얻을 수 있으니 상황에 맞게 선택하면 됩니다.