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

Lấy cột tương ứng với giá trị MAX() của cột khác trong MySQL

Để tìm bản ghi có giá trị lớn nhất ở một cột và lấy giá trị cột khác của bản ghi đó, dùng subquery với MAX() trong mệnh đề WHERE.

Ví dụ minh họa

Tạo bảng sản phẩm:

CREATE TABLE DemoTable (ProductId INT, ProductAmount INT);
INSERT INTO DemoTable VALUES 
(1001, 7895), (1003, 8903), (1010, 7690), (2010, 8450);

Tìm ProductId có ProductAmount lớn nhất:

SELECT * FROM DemoTable
WHERE ProductAmount = (SELECT MAX(ProductAmount) FROM DemoTable);

Kết quả

ProductIdProductAmount
10038903

Các cách khác

1. ORDER BY + LIMIT 1 (đơn giản, nhanh)

SELECT ProductId, ProductAmount
FROM DemoTable
ORDER BY ProductAmount DESC
LIMIT 1;

2. JOIN với subquery (khi cần nhiều cột từ subquery)

SELECT d.*
FROM DemoTable d
JOIN (SELECT MAX(ProductAmount) AS max_amt FROM DemoTable) m
  ON d.ProductAmount = m.max_amt;

3. Window Function (MySQL 8.0+)

SELECT ProductId, ProductAmount
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY ProductAmount DESC) AS rn
    FROM DemoTable
) t
WHERE rn = 1;

So sánh

CáchƯu điểmNhược điểm
Subquery WHEREDễ hiểu, ANSI SQLQuét bảng 2 lần (có thể chậm)
ORDER BY LIMITNhanh, dùng indexChỉ lấy 1 hàng (nếu tie cần xử lý thêm)
Window FunctionLinh hoạt (top N, tie-break)Chỉ MySQL 8.0+

Khuyên dùng: ORDER BY ... DESC LIMIT 1 cho trường hợp đơn giản; Window Function cho phức tạp.