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

단일 MySQL 쿼리로 두 테이블의 최대값 중 최소값 선택하기

MySQL에서 두 테이블 각각의 최대값(MAX)을 구한 뒤, 그중 가장 작은 값(MIN)을 하나의 쿼리로 추출하려면 UNION 연산자를 활용하면 됩니다. UNION은 여러 SELECT 문의 결과를 하나의 결과 집합으로 합쳐주기 때문에, 서로 다른 테이블에서 가져온 최대값들을 한 번에 비교할 수 있습니다.

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

mysql> create table DemoTable1
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.48 sec)

INSERT 명령으로 테이블에 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable1 values(60);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1 values(78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(57);
Query OK, 1 row affected (0.08 sec)

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select * from DemoTable1;

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

+-------+
| Value |
+-------+
| 60 |
| 78 |
| 57 |
+-------+
3 rows in set (0.00 sec)

이어서 두 번째 테이블을 생성합니다.

mysql> create table DemoTable2
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.48 sec)

두 번째 테이블에도 레코드를 삽입합니다.

mysql> insert into DemoTable2 values(90);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable2 values(67);
Query OK, 1 row affected (0.14 sec)

SELECT 문으로 두 번째 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable2;

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

+-------+
| Value |
+-------+
| 90 |
| 67 |
+-------+
2 rows in set (0.00 sec)

두 테이블의 최대값 중 최소값을 구하는 쿼리

이제 핵심 쿼리입니다. 서브쿼리에서 각 테이블의 최대값을 구한 후 UNION으로 결합하고, 외부 쿼리에서 MIN() 함수로 그중 가장 작은 값을 선택합니다.

mysql> select min(tbl.Value) as Value
-> from
-> (
-> select max(Value) as Value from DemoTable1
-> union
-> select max(Value) as Value from DemoTable2
-> ) as tbl;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------+
| Value |
+-------+
| 78 |
+-------+
1 row in set (0.04 sec)

결과 분석

DemoTable1의 최대값은 78, DemoTable2의 최대값은 90입니다. 이 두 값을 UNION으로 합치면 {78, 90}이 되고, 여기에 MIN() 함수를 적용하면 78이 반환됩니다. 즉, 두 테이블의 최대값들 중에서 더 작은 값이 선택된 것입니다.

이 방식은 테이블이 세 개 이상으로 늘어나더라도 동일하게 확장할 수 있습니다. UNION 절에 select max(Value) from 테이블명을 계속 추가하기만 하면 되므로, 여러 테이블의 통계값을 비교할 때 매우 유용한 패턴입니다.