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

วิธีใช้ SELECT ร่วมกับ COUNT ใน MySQL

การนับจำนวนแถวตามกลุ่มด้วย COUNT() และ GROUP BY

ฟังก์ชัน COUNT() ใช้ร่วมกับ GROUP BY เพื่อนับจำนวนรายการในแต่ละกลุ่ม ได้ผลลัพธ์แสดงค่าของคอลัมน์ที่จัดกลุ่ม พร้อมจำนวนนับ

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(100),
    Subject VARCHAR(100)
);

เพิ่มข้อมูล:

INSERT INTO DemoTable (Name, Subject) VALUES
('John', 'MySQL'),
('John', 'Java'),
('Carol', 'MongoDB'),
('Carol', 'Java'),
('Carol', 'MySQL'),
('John', 'MySQL'),
('Carol', 'MongoDB');

ข้อมูลในตาราง

+----+-------+---------+
| Id | Name  | Subject |
+----+-------+---------+
| 1  | John  | MySQL   |
| 2  | John  | Java    |
| 3  | Carol | MongoDB |
| 4  | Carol | Java    |
| 5  | Carol | MySQL   |
| 6  | John  | MySQL   |
| 7  | Carol | MongoDB |
+----+-------+---------+

คำสั่งนับจำนวนวิชาต่อคน

SELECT Name, Subject, COUNT(Subject) AS SubjectCount
FROM DemoTable
GROUP BY Name, Subject;

ผลลัพธ์

+-------+---------+--------------+
| Name  | Subject | SubjectCount |
+-------+---------+--------------+
| John  | MySQL   | 2            |
| John  | Java    | 1            |
| Carol | MongoDB | 2            |
| Carol | Java    | 1            |
| Carol | MySQL   | 1            |
+-------+---------+--------------+

คำอธิบาย:

  • GROUP BY Name, Subject จัดกลุ่มตามคู่ Name+Subject ที่ซ้ำกัน
  • COUNT(Subject) นับจำนวนแถวในแต่ละกลุ่ม (ไม่นับ NULL)
  • สามารถใช้ COUNT(*) ได้ผลลัพธ์เหมือนกัน เพราะไม่มีค่า NULL ในคอลัมน์ Subject

เคล็ดลับเพิ่มเติม:

  • ใช้ COUNT(DISTINCT Subject) หากต้องการนับวิชาที่ไม่ซ้ำกันต่อคน
  • เพิ่ม HAVING COUNT(Subject) > 1 เพื่อกรองเฉพาะกลุ่มที่มีมากกว่า 1 รายการ
  • ใส่ ORDER BY SubjectCount DESC เพื่อเรียงจากมากไปน้อย