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

วิธีนับจำนวน ID ซ้ำ และแสดงผลในคอลัมน์ใหม่ใน MySQL

การนับจำนวนข้อมูลซ้ำด้วย COUNT() และ GROUP BY

ใช้ Aggregate Function COUNT() ร่วมกับ GROUP BY เพื่อนับจำนวนแถวที่มีค่า ID ซ้ำกัน และแสดงจำนวนในคอลัมน์ใหม่

รูปแบบคำสั่ง

SELECT column_name, COUNT(*) AS count_alias 
FROM table_name 
GROUP BY column_name;

ตัวอย่าง: นับจำนวน ID ซ้ำ

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (
    Id INT,
    Name VARCHAR(100)
);

INSERT INTO DemoTable VALUES (50, 'Chris');
INSERT INTO DemoTable VALUES (51, 'David');
INSERT INTO DemoTable VALUES (51, 'Mike');
INSERT INTO DemoTable VALUES (50, 'Sam');

2. ดูข้อมูลทั้งหมด

SELECT * FROM DemoTable;

ผลลัพธ์:

+------+-------+
| Id   | Name  |
+------+-------+
| 50   | Chris |
| 51   | David |
| 51   | Mike  |
| 50   | Sam   |
+------+-------+

3. นับจำนวน ID ซ้ำ แสดงในคอลัมน์ Count

SELECT Id, COUNT(Name) AS Count 
FROM DemoTable 
GROUP BY Id;

ผลลัพธ์:

+------+-------+
| Id   | Count |
+------+-------+
| 50   | 2     |
| 51   | 2     |
+------+-------+

การใช้งานขั้นสูง

แสดงเฉพาะ ID ที่ซ้ำ (Count > 1)

SELECT Id, COUNT(*) AS Count 
FROM DemoTable 
GROUP BY Id 
HAVING COUNT(*) > 1;

นับค่า Distinct ในคอลัมน์อื่น

SELECT Id, COUNT(DISTINCT Name) AS UniqueNames 
FROM DemoTable 
GROUP BY Id;

แสดงรายละเอียดพร้อมจำนวนซ้ำ

SELECT d.*, dup.Count 
FROM DemoTable d
JOIN (
    SELECT Id, COUNT(*) AS Count 
    FROM DemoTable 
    GROUP BY Id
) dup ON d.Id = dup.Id;

COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)

คำสั่งความหมาย
COUNT(*)นับจำนวนแถวทั้งหมด (รวม NULL)
COUNT(column)นับจำนวนค่าที่ไม่ใช่ NULL ในคอลัมน์นั้น
COUNT(DISTINCT column)นับจำนวนค่าที่ไม่ซ้ำและไม่ใช่ NULL

ประสิทธิภาพ

  • สร้าง Index บนคอลัมน์ที่ GROUP BY เพื่อเร่งการจัดกลุ่ม
  • EXPLAIN SELECT ... GROUP BY Id เพื่อดู Execution Plan