การใช้ 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 แถว