MySQL에서 여러 개의 열(column)에 저장된 값들 중 가장 큰 값을 한 번에 확인하고 싶다면 GREATEST() 함수를 사용하면 됩니다. 별도의 조건문이나 복잡한 쿼리 없이, 인자로 전달된 값들 중 최대값을 손쉽게 반환해 줍니다.
GREATEST() 함수 기본 문법
세 개의 서로 다른 열에서 최대값을 구하는 기본 문법은 다음과 같습니다.
SELECT GREATEST(yourColumnName1, yourColumnName2, yourColumnName3) AS anyAliasName FROM yourTableName;
각 열 이름을 콤마(,)로 구분하여 GREATEST() 함수에 전달하고, AS 절을 사용해 결과 컬럼에 원하는 별칭(alias)을 지정할 수 있습니다.
예제 테이블 생성
실제 동작을 이해하기 위해 세 개의 정수형 열을 가진 테이블을 먼저 만들어 보겠습니다.
mysql> create table MaxOfThreeColumnsDemo
-> (
-> First int,
-> Second int,
-> Third int
-> );
Query OK, 0 rows affected (0.73 sec)샘플 데이터 삽입
INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into MaxOfThreeColumnsDemo values(30,90,60); Query OK, 1 row affected (0.16 sec) mysql> insert into MaxOfThreeColumnsDemo values(100,40,50); Query OK, 1 row affected (0.20 sec) mysql> insert into MaxOfThreeColumnsDemo values(101,290,150); Query OK, 1 row affected (0.22 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from MaxOfThreeColumnsDemo;
실행 결과는 다음과 같습니다.
+-------+--------+-------+ | First | Second | Third | +-------+--------+-------+ | 30 | 90 | 60 | | 100 | 40 | 50 | | 101 | 290 | 150 | +-------+--------+-------+ 3 rows in set (0.00 sec)
세 개의 열에서 최대값 조회하기
이제 GREATEST() 함수를 활용해 각 행(row)별로 세 개의 열 중 가장 큰 값을 조회하는 쿼리는 다음과 같습니다.
mysql> select greatest(First,Second,Third) AS MAXValueOfThreeColumns from MaxOfThreeColumnsDemo;
실행 결과를 확인해 보면, 각 행마다 세 열 중 최대값이 정상적으로 출력되는 것을 알 수 있습니다.
+------------------------+ | MAXValueOfThreeColumns | +------------------------+ | 90 | | 100 | | 290 | +------------------------+ 3 rows in set (0.00 sec)
정리 및 참고 사항
첫 번째 행에서는 Second 열의 90, 두 번째 행에서는 First 열의 100, 세 번째 행에서는 Second 열의 290이 각각 최대값으로 반환되었습니다.
참고로 GREATEST() 함수는 두 개 이상의 인자를 지원하므로, 네 개 이상의 열에서 최대값을 구할 때도 동일한 방식으로 활용할 수 있습니다. 또한 반대로 여러 값 중 최소값을 구하고 싶다면 LEAST() 함수를 사용하면 됩니다.
단, 인자 중 하나라도 NULL이 포함되어 있으면 GREATEST() 함수는 NULL을 반환하므로, NULL 값이 존재할 가능성이 있는 데이터에는 IFNULL() 등의 함수를 함께 사용하는 것이 좋습니다.