ใช้ GROUP BY ร่วม COUNT() เพื่อนับความถี่ของแต่ละค่า
ตัวอย่างการใช้งาน
1. สร้างตารางสินค้า
mysql> CREATE TABLE DemoTable (ProductName VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES
('Product-1'), ('Product-2'), ('Product-3'), ('Product-3'),
('Product-2'), ('Product-4'), ('Product-5'), ('Product-1');
2. นับจำนวนแต่ละสินค้า
mysql> SELECT ProductName, COUNT(ProductName) AS TotalCount
-> FROM DemoTable GROUP BY ProductName;
ผลลัพธ์
+-------------+------------+ | ProductName | TotalCount | +-------------+------------+ | Product-1 | 2 | | Product-2 | 2 | | Product-3 | 2 | | Product-4 | 1 | | Product-5 | 1 | +-------------+------------+
รูปแบบ Query เพิ่มเติม
เรียงตามจำนวนมากไปน้อย
SELECT ProductName, COUNT(*) AS cnt FROM DemoTable GROUP BY ProductName ORDER BY cnt DESC;
เฉพาะที่ซ้ำ (Count > 1)
SELECT ProductName, COUNT(*) AS cnt FROM DemoTable GROUP BY ProductName HAVING cnt > 1;
รวม NULL ด้วย
SELECT COALESCE(ProductName, '(NULL)'), COUNT(*) FROM DemoTable GROUP BY ProductName;
ประสิทธิภาพ
- สร้าง Index บนคอลัมน์ที่ GROUP BY:
CREATE INDEX idx_prod ON DemoTable(ProductName) - MySQL 8.0+ ใช้ Window Function ได้:
COUNT(*) OVER (PARTITION BY ProductName)