การดึงสินค้าที่มีราคาสูงสุด (อาจมีหลายรายการ) ด้วย Subquery และ MAX()
เพื่อแสดงสินค้าทุกชิ้นที่มีราคาเท่ากับราคาสูงสุดในตาราง เราใช้ Subquery หา MAX(ProductAmount) แล้วกรองในคำสั่งหลัก
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
ProductId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ProductName VARCHAR(100),
ProductAmount INT
);
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable(ProductName, ProductAmount) VALUES('Product-1',60);
mysql> INSERT INTO DemoTable(ProductName, ProductAmount) VALUES('Product-2',40);
mysql> INSERT INTO DemoTable(ProductName, ProductAmount) VALUES('Product-3',75);
mysql> INSERT INTO DemoTable(ProductName, ProductAmount) VALUES('Product-4',50);
mysql> INSERT INTO DemoTable(ProductName, ProductAmount) VALUES('Product-5',75);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+-------------+---------------+
| ProductId | ProductName | ProductAmount |
+-----------+-------------+---------------+
| 1 | Product-1 | 60 |
| 2 | Product-2 | 40 |
| 3 | Product-3 | 75 |
| 4 | Product-4 | 50 |
| 5 | Product-5 | 75 |
+-----------+-------------+---------------+
5 rows in set (0.00 sec)
คำสั่งแสดงสินค้าที่มีราคาสูงสุด
mysql> SELECT * FROM DemoTable
WHERE ProductAmount = (SELECT MAX(ProductAmount) FROM DemoTable);
ผลลัพธ์:
+-----------+-------------+---------------+
| ProductId | ProductName | ProductAmount |
+-----------+-------------+---------------+
| 3 | Product-3 | 75 |
| 5 | Product-5 | 75 |
+-----------+-------------+---------------+
2 rows in set (0.00 sec)
คำอธิบาย
- Subquery
(SELECT MAX(ProductAmount) FROM DemoTable)คืนค่า 75 - คำสั่งหลักกรอง
ProductAmount = 75→ ได้ Product-3 และ Product-5 - วิธีนี้ดึงข้อมูลครบถ้วน (ทุกคอลัมน์) ของสินค้าที่มีราคาสูงสุด
- ต่างจาก
ORDER BY ProductAmount DESC LIMIT 1ที่ให้แค่ 1 แถว แม้จะมีหลายรายการเท่ากัน