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

Trả về giá trị lớn nhất từ bản ghi trong MySQL

Để tìm bản ghi có giá trị lớn nhất trên một cột số, MySQL dùng hàm tập hợp MAX() kết hợp với subquery hoặc ORDER BY ... LIMIT 1.

Ví dụ minh họa

Tạo bảng điểm người chơi:

mysql> CREATE TABLE DemoTable1449 (
    PlayerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PlayerScore INT
);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1449 (PlayerScore) VALUES (1040);
mysql> INSERT INTO DemoTable1449 (PlayerScore) VALUES (1450);
mysql> INSERT INTO DemoTable1449 (PlayerScore) VALUES (1890);
mysql> INSERT INTO DemoTable1449 (PlayerScore) VALUES (1650);

Dữ liệu:

mysql> SELECT * FROM DemoTable1449;
+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
|        1 |        1040 |
|        2 |        1450 |
|        3 |        1890 |
|        4 |        1650 |
+----------+-------------+

Cách 1: Subquery với MAX() (chuẩn SQL, trả về tất cả hàng có max)

mysql> SELECT PlayerId, PlayerScore 
    FROM DemoTable1449 
    WHERE PlayerScore = (SELECT MAX(PlayerScore) FROM DemoTable1449);

Kết quả:

+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
|        3 |        1890 |
+----------+-------------+

Cách 2: ORDER BY DESC LIMIT 1 (nhanh hơn, trả về 1 hàng)

mysql> SELECT PlayerId, PlayerScore 
    FROM DemoTable1449 
    ORDER BY PlayerScore DESC 
    LIMIT 1;

Kết quả tương tự.

So sánh 2 cách

Tiêu chíSubquery MAX()ORDER BY LIMIT 1
Trả vềTất cả hàng có giá trị max (nếu tie)Chỉ 1 hàng (tie-break tùy ORDER BY phụ)
Hiệu năng2 lần quét (hoặc optimize bằng index)1 lần quét + sort (hoặc index scan)
IndexTận dụng index trên PlayerScoreTận dụng index trên PlayerScore
Chuẩn SQL✅✅ (LIMIT là MySQL/PostgreSQL)

Mở rộng: Tìm Top N