MySQL에서 GREATEST() 함수로 테이블 업데이트하기
MySQL의 GREATEST() 함수는 여러 인수 중 가장 큰 값을 반환하는 함수입니다. 이 함수를 UPDATE문과 함께 활용하면 기존 값과 새 값을 비교하여 항상 더 큰 값으로 컬럼을 갱신할 수 있습니다. 아래에서 테이블 생성부터 업데이트까지 전 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Number int
);
Query OK, 0 rows affected (0.64 sec)
2단계: 데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable(Number) values(10);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Number) values(50);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(Number) values(100);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(Number) values(190);
Query OK, 1 row affected (0.12 sec)
3단계: 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+--------+
| Id | Number |
+----+--------+
| 1 | 10 |
| 2 | 50 |
| 3 | 100 |
| 4 | 190 |
+----+--------+
4 rows in set (0.00 sec)
4단계: GREATEST()를 사용한 업데이트
다음은 MySQL에서 GREATEST() 함수를 사용하여 테이블을 업데이트하는 쿼리입니다. 아래 예제에서는 Id가 3인 행의 Number 값을 현재 값(100)과 200 중 더 큰 값으로 갱신합니다.
mysql> update DemoTable set Number=GREATEST(200,Number) WHERE Id=3;
Query OK, 1 row affected (0.16 sec)
Rows matched: 1 Changed: 1 Warnings: 0
5단계: 결과 확인
업데이트 후 테이블 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
Id가 3인 행의 Number 값이 200으로 변경된 것을 확인할 수 있습니다.
+----+--------+
| Id | Number |
+----+--------+
| 1 | 10 |
| 2 | 50 |
| 3 | 200 |
| 4 | 190 |
+----+--------+
4 rows in set (0.00 sec)
정리
GREATEST() 함수는 인수로 전달된 값들 중 최대값을 반환합니다. 위 예제처럼 UPDATE ... SET 컬럼 = GREATEST(기준값, 컬럼) 형태로 사용하면, 기존 값이 기준값보다 클 경우 기존 값이 그대로 유지되고 작을 경우에만 기준값으로 갱신됩니다. 이는 특정 컬럼에 최소 보장 값(threshold)을 설정할 때 매우 유용하게 활용할 수 있는 패턴입니다.