รูปแบบคำสั่ง
SELECT MIN(yourColumnName) FROM yourTableName GROUP BY yourColumnName;
หมายเหตุ: ตัวอย่างต้นฉบับมี GROUP BY yourColumnName ซ้ำ ควรเป็น GROUP BY id_column
สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable2005 ( Id int, Price float );
mysql> insert into DemoTable2005 values(1, 56.88); mysql> insert into DemoTable2005 values(1, 120.56);
ข้อมูลในตาราง
+------+--------+ | Id | Price | +------+--------+ | 1 | 56.88 | | 1 | 120.56 | +------+--------+
Query หาค่า Price ต่ำสุด จัดกลุ่มตาม Id
mysql> select min(Price) from DemoTable2005 group by Id;
ผลลัพธ์
+------------+ | min(Price) | +------------+ | 56.88 | +------------+
อธิบาย
GROUP BY Idจับกลุ่มแถวที่ Id เดียวกัน (Id=1 มี 2 แถว)MIN(Price)หาค่าน้อยสุดในแต่ละกลุ่ม- ผลลัพธ์: 56.88 (น้อยกว่า 120.56)
ขยาย: ดึง Id และ Min Price พร้อมกัน
SELECT Id, MIN(Price) AS MinPrice FROM DemoTable2005 GROUP BY Id;
+------+----------+ | Id | MinPrice | +------+----------+ | 1 | 56.88 | +------+----------+
กรณีต้องการดูข้อมูลแถวเต็มของค่าต่ำสุด
-- MySQL 8.0+ Window Function
SELECT Id, Price FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Price ASC) AS rn
FROM DemoTable2005
) t WHERE rn = 1;
-- ทุก Version (Self Join)
SELECT t1.* FROM DemoTable2005 t1
JOIN (
SELECT Id, MIN(Price) AS MinPrice FROM DemoTable2005 GROUP BY Id
) t2 ON t1.Id = t2.Id AND t1.Price = t2.MinPrice;
ข้อควรระวังกับ FLOAT
FLOATและDOUBLEเป็น Approximate Numeric (เก็บค่าประมาณ)- การเปรียบเทียบ =, MIN, MAX อาจให้ผลผิดปกติจาก Precision Error
- แนะนำ: ใช้
DECIMAL(precision, scale)สำหรับเงิน/ราคา (เช่นDECIMAL(10,2))
ตัวอย่างแก้ไขเป็น DECIMAL
CREATE TABLE DemoTable2005_Fixed (
Id INT,
Price DECIMAL(10,2) -- รองรับสูงสุด 99,999,999.99
);