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

วิธีนับจำนวนค่าที่ซ้ำในคอลัมน์ MySQL (COUNT DISTINCT GROUP BY)

ใช้ COUNT() ร่วมกับ GROUP BY เพื่อนับจำนวนการเกิดของแต่ละค่าในคอลัมน์

ตัวอย่างข้อมูล

CREATE TABLE DistinctDemo1 (
    id INT,
    name VARCHAR(100)
);

INSERT INTO DistinctDemo1 VALUES 
(1, 'John'), (2, 'John'), (3, 'John'),
(4, 'Carol'), (5, 'David');

Query นับจำนวนแต่ละชื่อ

SELECT 
    name, 
    COUNT(*) AS OccurrenceValue
FROM DistinctDemo1
GROUP BY name
ORDER BY OccurrenceValue;

ผลลัพธ์

+-------+----------------+
| name  | OccurrenceValue|
+-------+----------------+
| Carol | 1              |
| David | 1              |
| John  | 3              |
+-------+----------------+

Variations

1. นับค่า Unique เท่านั้น (COUNT DISTINCT)

SELECT COUNT(DISTINCT name) FROM DistinctDemo1;
-- ผลลัพธ์: 3 (John, Carol, David)

2. นับรวม NULL ด้วย

SELECT 
    name, 
    COUNT(*) AS total_rows,
    COUNT(name) AS non_null_count
FROM DistinctDemo1
GROUP BY name;

3. ใส่เงื่อนไข HAVING (Filter หลัง Group)

SELECT name, COUNT(*) AS cnt
FROM DistinctDemo1
GROUP BY name
HAVING COUNT(*) > 1;  -- แสดงเฉพาะชื่อที่ซ้ำ

4. เรียงลำดับตามจำนวน (มากไปน้อย)

SELECT name, COUNT(*) AS cnt
FROM DistinctDemo1
GROUP BY name
ORDER BY cnt DESC, name;

Performance Tips

  • สร้าง Index บนคอลัมน์ที่ GROUP BY: CREATE INDEX idx_name ON DistinctDemo1(name)
  • ใช้ COUNT(*) แทน COUNT(column) (เร็วกว่าใน InnoDB)
  • หลีกเลี่ยง SELECT * ใน Subquery ที่ Group By

ใช้กับ Window Function (MySQL 8.0+)

SELECT 
    name,
    COUNT(*) OVER (PARTITION BY name) AS name_count
FROM DistinctDemo1;
-- แสดง Count ต่อแถว ไม่รวม Group