Dùng subquery với MAX(cot1 + cot2) để tìm giá trị tổng lớn nhất, sau đó lọc hàng gốc có tổng bằng giá trị đó.
Ví dụ minh họa
Tạo bảng 2 cột số:
CREATE TABLE DemoTable1587 (Value1 INT, Value2 INT); INSERT INTO DemoTable1587 VALUES (30,50), (80,90), (40,67);
Tìm hàng có Value1+Value2 lớn nhất:
SELECT * FROM DemoTable1587 WHERE Value1 + Value2 = (SELECT MAX(Value1 + Value2) FROM DemoTable1587);
Kết quả
| Value1 | Value2 | Tổng |
|---|---|---|
| 80 | 90 | 170 |
Các cách khác
1. ORDER BY + LIMIT 1 (đơn giản, nhanh)
SELECT * FROM DemoTable1587 ORDER BY (Value1 + Value2) DESC LIMIT 1;
2. Window Function (MySQL 8.0+)
SELECT Value1, Value2 FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY (Value1+Value2) DESC) AS rn
FROM DemoTable1587
) t WHERE rn = 1;
3. CROSS JOIN (cách cũ)
SELECT d.* FROM DemoTable1587 d CROSS JOIN (SELECT MAX(Value1+Value2) AS m FROM DemoTable1587) m WHERE d.Value1 + d.Value2 = m.m;
So sánh
| Cách | Ưu điểm | Nhược điểm |
|---|---|---|
| Subquery WHERE | ANSI SQL, dễ hiểu | Tính tổng 2 lần (có thể chậm) |
| ORDER BY LIMIT | Nhanh, dùng index (nếu có) | Chỉ 1 hàng, tie-break cần xử lý |
| Window Function | Top-N, tie-break linh hoạt | Chỉ MySQL 8.0+ |