Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การนับ ID ซ้ำและแสดงผลในคอลัมน์แยกใน MySQL

เมื่อต้องการนับจำนวนระเบียนที่มี 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;