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

Cách chọn hàng có giá trị nhỏ nhất (MIN) trong MySQL


Cú pháp

Sử dụng subquery với hàm MIN() trong mệnh đề WHERE:

SELECT * FROM ten_bang 
WHERE ten_cot = (SELECT MIN(ten_cot) FROM ten_bang);

Ví dụ: Tìm sản phẩm giá rẻ nhất

1. Tạo bảng

mysql> CREATE TABLE MinValueDemo ( 
-> ProductId INT, 
-> ProductName VARCHAR(100), 
-> ProductPrice INT 
-> ); 
Query OK, 0 rows affected (0.77 sec)

2. Chèn dữ liệu

mysql> INSERT INTO MinValueDemo VALUES(1,'product-1',4500); 
Query OK, 1 row affected (0.14 sec) 
mysql> INSERT INTO MinValueDemo VALUES(2,'product-2',4340); 
Query OK, 1 row affected (0.22 sec) 
mysql> INSERT INTO MinValueDemo VALUES(3,'product-3',4110); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO MinValueDemo VALUES(4,'product-4',4344); 
Query OK, 1 row affected (0.16 sec) 
mysql> INSERT INTO MinValueDemo VALUES(5,'product-5',4103); 
Query OK, 1 row affected (0.13 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM MinValueDemo;
+-----------+-------------+--------------+ 
| ProductId | ProductName | ProductPrice | 
+-----------+-------------+--------------+ 
| 1         | product-1   | 4500         | 
| 2         | product-2   | 4340         | 
| 3         | product-3   | 4110         | 
| 4         | product-4   | 4344         | 
| 5         | product-5   | 4103         | 
+-----------+-------------+--------------+ 
5 rows in set (0.00 sec)

4. Tìm sản phẩm giá thấp nhất

mysql> SELECT * FROM MinValueDemo 
-> WHERE ProductPrice = (SELECT MIN(ProductPrice) FROM MinValueDemo);
+-----------+-------------+--------------+ 
| ProductId | ProductName | ProductPrice | 
+-----------+-------------+--------------+ 
| 5         | product-5   | 4103         | 
+-----------+-------------+--------------+ 
1 row in set (0.08 sec)

Các phương pháp thay thế

ORDER BY + LIMIT 1 (Đơn giản, hiệu quả)

SELECT * FROM ten_bang ORDER BY ten_cot ASC LIMIT 1;

JOIN với subquery (Cho phép lấy thêm thông tin)

SELECT t.* 
FROM ten_bang t
INNER JOIN (SELECT MIN(ten_cot) AS min_val FROM ten_bang) m 
ON t.ten_cot = m.min_val;

Window Function (MySQL 8.0+)

SELECT * FROM (
    SELECT *, MIN(ten_cot) OVER() AS min_val FROM ten_bang
) t WHERE ten_cot = min_val;

So sánh

Phương phápƯu điểmNhược điểmPhù hợp
WHERE = (SELECT MIN...)Chuẩn SQL, rõ ràng2 lần quét bảng/ indexBảng nhỏ, truy vấn ad-hoc
ORDER BY ... LIMIT 1Nhanh, dùng indexChỉ lấy 1 hàng (nếu tie)Khuyên dùng cho hiệu năng
JOIN subqueryLấy được nhiều hàng cùng minPhức tạp hơnCần toàn bộ hàng có giá trị min
Window FunctionLinh hoạt, 1 lần quétChỉ MySQL 8.0+Phân tích nâng cao

Xử lý trường hợp nhiều hàng cùng giá trị MIN

-- Lấy tất cả hàng có giá trị nhỏ nhất
SELECT * FROM ten_bang 
WHERE ten_cot = (SELECT MIN(ten_cot) FROM ten_bang);

Lưu ý

  • Index trên cột so sánh (ProductPrice) quan trọng cho hiệu năng
  • NULL không được coi là giá trị nhỏ nhất bởi MIN()
  • Kết hợp với các cột khác trong SELECT để lấy thông tin đầy đủ