Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธี SELECT ข้อมูลที่มีค่าน้อยที่สุด (MIN) ในคอลัมน์ MySQL

การใช้ Subquery กับ MIN()

หาค่าต่ำสุดก่อนด้วย MIN() แล้วค่อยดึงแถวที่ตรงกับค่านั้น

รูปแบบคำสั่ง

SELECT * FROM yourTableName 
WHERE yourColumnName = (SELECT MIN(yourColumnName) FROM yourTableName);

ตัวอย่าง: หาสินค้าราคาถูกที่สุด

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

mysql> INSERT INTO MinValueDemo VALUES(1,'product-1',4500);
mysql> INSERT INTO MinValueDemo VALUES(2,'product-2',4340);
mysql> INSERT INTO MinValueDemo VALUES(3,'product-3',4110);
mysql> INSERT INTO MinValueDemo VALUES(4,'product-4',4344);
mysql> INSERT INTO MinValueDemo VALUES(5,'product-5',4103);

ข้อมูลทั้งหมด

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)

คำสั่งหาสินค้าราคาต่ำสุด

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)

วิธีอื่น (MySQL 8.0+):

-- ใช้ CTE
WITH min_price AS (SELECT MIN(ProductPrice) AS mp FROM MinValueDemo)
SELECT m.* FROM MinValueDemo m JOIN min_price mp ON m.ProductPrice = mp.mp;

-- ใช้ LIMIT (ถ้าต้องการแค่ 1 แถว แม้จะมีราคาเท่ากันหลายรายการ)
SELECT * FROM MinValueDemo ORDER BY ProductPrice ASC LIMIT 1;

หมายเหตุ: Subquery way จะคืนทุกแถวที่มีค่าต่ำสุดเท่ากัน LIMIT 1 จะคืนแค่ 1 แถว