Tìm MIN của các MAX từ hai bảng với UNION
Sử dụng subquery với UNION gộp giá trị MAX từ mỗi bảng, rồi lấy MIN của tập kết quả.
Tạo bảng 1 và dữ liệu
mysql> create table DemoTable1 ( Value int ); mysql> insert into DemoTable1 values(60), (78), (57);
+-------+ | Value | +-------+ | 60 | | 78 | | 57 | +-------+
Tạo bảng 2 và dữ liệu
mysql> create table DemoTable2 ( Value int ); mysql> insert into DemoTable2 values(90), (67);
+-------+ | Value | +-------+ | 90 | | 67 | +-------+
Truy vấn: Min của (Max bảng 1, Max bảng 2)
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;
Kết quả
+-------+ | Value | +-------+ | 78 | +-------+
Phân tích:
- Max bảng 1: 78
- Max bảng 2: 90
- UNION gộp: {78, 90}
- MIN của tập hợp: 78
Lưu ý: UNION loại bỏ trùng lặp. Nếu muốn giữ trùng lặp, dùng UNION ALL (không ảnh hưởng kết quả MIN trong trường hợp này).
Cách thay thế (MySQL 8.0+): Dùng CTE (Common Table Expression) để dễ đọc hơn.