Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm hàng có tổng 2 cột lớn nhất trong MySQL

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ả

Value1Value2Tổng
8090170

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

Khuyên dùng: ORDER BY (Value1+Value2) DESC LIMIT 1 cho đơn giản; Window Function cho top-N.

⚠️ Lưu ý

Biểu thức Value1 + Value2 trong ORDER BY/WHERE không dùng được index thông thường. Cân nhắc generated column + index:

ALTER TABLE DemoTable1587 
ADD COLUMN SumValues INT GENERATED ALWAYS AS (Value1 + Value2) STORED,
ADD INDEX idx_sum (SumValues);
CáchƯu điểmNhược điểm
Subquery WHEREANSI SQL, dễ hiểuTính tổng 2 lần (có thể chậm)
ORDER BY LIMITNhanh, dùng index (nếu có)Chỉ 1 hàng, tie-break cần xử lý
Window FunctionTop-N, tie-break linh hoạtChỉ MySQL 8.0+