두 개의 서로 다른 MySQL 테이블에서 각각 열의 최댓값(MAX)을 구한 뒤, 그중 더 큰 값을 한 번에 얻으려면 GREATEST() 함수를 사용하면 됩니다. GREATEST()는 인자로 전달된 여러 값 중 가장 큰 값을 반환하는 함수로, 서브쿼리 결과와 함께 사용하면 두 테이블의 최댓값을 손쉽게 비교할 수 있습니다.
먼저 첫 번째 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1 ( Number int ); Query OK, 0 rows affected (0.52 sec)
insert 명령을 사용해 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1 values(80); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable1 values(229); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1 values(575); Query OK, 1 row affected (0.24 sec)
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable1;
출력 결과
+--------+ | Number | +--------+ | 80 | | 229 | | 575 | +--------+ 3 rows in set (0.00 sec)
이어서 두 번째 테이블을 생성합니다.
mysql> create table DemoTable2 ( Number int ); Query OK, 0 rows affected (0.51 sec)
마찬가지로 insert 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable2 values(485); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable2 values(10); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable2 values(475); Query OK, 1 row affected (0.12 sec)
select 문으로 두 번째 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable2;
출력 결과
+--------+ | Number | +--------+ | 485 | | 10 | | 475 | +--------+ 3 rows in set (0.00 sec)
이제 두 테이블의 열에서 각각 최댓값을 구하고, 그중 더 큰 값을 반환하는 쿼리입니다. 각 테이블의 max(Number)를 서브쿼리로 구한 뒤 GREATEST()로 비교합니다.
mysql> select greatest((select max(Number) from DemoTable1),(select max(Number) from DemoTable2));
출력 결과
+-----------------------------------------------------------------------------------------+ | greatest((select max(Number) from DemoTable1),(select max(Number) from DemoTable2)) | +-----------------------------------------------------------------------------------------+ | 575 | +-----------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
결과를 보면 DemoTable1의 최댓값은 575, DemoTable2의 최댓값은 485입니다. GREATEST() 함수가 두 값을 비교하여 전체 최댓값인 575를 반환한 것을 확인할 수 있습니다. 이처럼 GREATEST()와 서브쿼리를 조합하면 여러 테이블에 흩어진 값 중 가장 큰 값을 간단하게 조회할 수 있습니다.