เมื่อต้องการนับจำนวนระเบียนที่มี ID ซ้ำกัน และแสดงจำนวนที่นับได้ในคอลัมน์แยกต่างหาก ใช้ GROUP BY ร่วมกับฟังก์ชัน COUNT() หรือ COUNT(DISTINCT ...) ตามความต้องการ
ตัวอย่างการใช้งาน
สร้างตารางรีวิวลูกค้า:
mysql> CREATE TABLE DemoTable1453 (
-> CustomerId INT,
-> CustomerReviewNumber INT
-> );
เพิ่มข้อมูล (มี CustomerId ซ้ำหลายครั้ง):
mysql> INSERT INTO DemoTable1453 VALUES (10, 4), (10, 4), (11, 5), (11, 5), (11, 5), (13, 2), (11, 5), (10, 4), (13, 2);
ดูข้อมูลทั้งหมด (9 แถว):
mysql> SELECT * FROM DemoTable1453; +------------+----------------------+ | CustomerId | CustomerReviewNumber | +------------+----------------------+ | 10 | 4 | | 10 | 4 | | 11 | 5 | | 11 | 5 | | 11 | 5 | | 13 | 2 | | 11 | 5 | | 10 | 4 | | 13 | 2 | +------------+----------------------+
นับจำนวน Review Number ที่ ไม่ซ้ำกัน (Distinct) ต่อ CustomerId:
mysql> SELECT CustomerId, COUNT(DISTINCT CustomerReviewNumber)
-> FROM DemoTable1453
-> GROUP BY CustomerId;
ผลลัพธ์ (แต่ละ CustomerId มี Review Number แค่ 1 ค่า ไม่ซ้ำ):
+------------+--------------------------------------+ | CustomerId | COUNT(DISTINCT CustomerReviewNumber) | +------------+--------------------------------------+ | 10 | 1 | | 11 | 1 | | 13 | 1 | +------------+--------------------------------------+
การนับแบบต่างๆ
| คำสั่ง | ความหมาย | ผลลัพธ์ตัวอย่าง |
|---|---|---|
| COUNT(*) | นับทุกแถว (รวม NULL) | 10→3, 11→4, 13→2 |
| COUNT(CustomerReviewNumber) | นับแถวที่ CustomerReviewNumber ไม่เป็น NULL | เท่า COUNT(*) หากไม่มี NULL |
| COUNT(DISTINCT CustomerReviewNumber) | นับค่า CustomerReviewNumber ที่ไม่ซ้ำกัน | ทั้งหมด = 1 |
การประยุกต์ใช้
- นับจำนวนออเดอร์ต่อลูกค้า:
COUNT(*) - นับจำนวนสินค้าที่แตกต่างกันต่อออเดอร์:
COUNT(DISTINCT product_id) - นับจำนวนวันที่มีการขายต่อเดือน:
COUNT(DISTINCT DATE(order_date)) - หาลูกค้าที่ซื้อหลายครั้ง:
HAVING COUNT(*) > 1
แสดงผลในคอลัมน์แยก (Multiple Count Columns)
SELECT CustomerId,
COUNT(*) AS TotalReviews,
COUNT(DISTINCT CustomerReviewNumber) AS UniqueReviewNumbers
FROM DemoTable1453
GROUP BY CustomerId;