การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1875 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Class VARCHAR(20),
Amount INT
);
mysql> INSERT INTO DemoTable1875(Class, Amount) VALUES
('X', 750), ('X', 140), ('X', 450),
('Y', 6780),
('Z', 1350), ('Z', 2050);
ข้อมูลในตาราง
+----+-------+--------+
| Id | Class | Amount |
+----+-------+--------+
| 1 | X | 750 |
| 2 | X | 140 |
| 3 | X | 450 |
| 4 | Y | 6780 |
| 5 | Z | 1350 |
| 6 | Z | 2050 |
+----+-------+--------+
หาค่า Amount ต่ำสุดแต่ละ Class
mysql> SELECT Class, MIN(Amount) FROM DemoTable1875 GROUP BY Class;
ผลลัพธ์:
+-------+-------------+
| Class | Min(Amount) |
+-------+-------------+
| X | 140 |
| Y | 6780 |
| Z | 1350 |
+-------+-------------+
ขยาย: ดูรายละเอียดแถวที่มีค่าต่ำสุด
-- MySQL 8.0+ ใช้ Window Function
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Class ORDER BY Amount) AS rn
FROM DemoTable1875
) t WHERE rn = 1;
-- Version เก่า: Self Join
SELECT t1.* FROM DemoTable1875 t1
JOIN (
SELECT Class, MIN(Amount) AS min_amt FROM DemoTable1875 GROUP BY Class
) t2 ON t1.Class = t2.Class AND t1.Amount = t2.min_amt;
ฟังก์ชัน Aggregate อื่นๆ
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| MIN() | ค่าต่ำสุด |
| MAX() | ค่าสูงสุด |
| AVG() | ค่าเฉลี่ย |
| SUM() | ผลรวม |
| COUNT() | จำนวนแถว |
| GROUP_CONCAT() | รวมค่าเป็น String |