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

วิธีนับจำนวน FileID แต่ละค่าในตาราง MySQL ด้วย GROUP BY

การนับจำนวนรายการของแต่ละ FileID ด้วย COUNT() และ GROUP BY

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

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

SELECT FileID, COUNT(*) AS EntryCount 
FROM table_name 
GROUP BY FileID;

ตัวอย่าง: นับจำนวน Entry ของแต่ละ FileID

1. สร้างตาราง (มี AUTO_INCREMENT เริ่ม 100)

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FileID INT
) AUTO_INCREMENT = 100;

2. เพิ่มข้อมูล (FileID ซ้ำกัน)

INSERT INTO DemoTable (FileID) VALUES (50), (60), (50), (70), (60), (50);

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

SELECT * FROM DemoTable;

ผลลัพธ์:

+-----+---------+
| Id  | FileID  |
+-----+---------+
| 100 | 50      |
| 101 | 60      |
| 102 | 50      |
| 103 | 70      |
| 104 | 60      |
| 105 | 50      |
+-----+---------+

4. นับจำนวนแต่ละ FileID

SELECT FileID, COUNT(*) AS EntryCount 
FROM DemoTable 
GROUP BY FileID;

ผลลัพธ์:

+---------+------------+
| FileID  | EntryCount |
+---------+------------+
| 50      | 3          |
| 60      | 2          |
| 70      | 1          |
+---------+------------+

หมายเหตุ: COUNT(FieldId) ในต้นฉบับผิด

คำสั่งต้นฉบับเขียน COUNT(FieldId) แต่คอลัมน์ชื่อ FileID ควรเป็น COUNT(*) หรือ COUNT(FileID)

การขยาย: เรียงตามจำนวนมากไปน้อย

SELECT FileID, COUNT(*) AS EntryCount 
FROM DemoTable 
GROUP BY FileID 
ORDER BY EntryCount DESC;

การขยาย: กรองเฉพาะที่ซ้ำ (Count > 1)

SELECT FileID, COUNT(*) AS EntryCount 
FROM DemoTable 
GROUP BY FileID 
HAVING COUNT(*) > 1;

ประสิทธิภาพ

  • สร้าง Index บน FileID: CREATE INDEX idx_fileid ON DemoTable(FileID)
  • Index จะช่วย GROUP BY เร็วขึ้น (Loose Index Scan)
  • EXPLAIN เพื่อดูว่าใช้ Index หรือไม่

กรณี FileID เป็น NULL

-- GROUP BY จะจัดกลุ่ม NULL เป็นกลุ่มเดียว
SELECT FileID, COUNT(*) FROM DemoTable GROUP BY FileID;

-- หากไม่นับ NULL
SELECT FileID, COUNT(FileID) FROM DemoTable GROUP BY FileID;
-- COUNT(FileID) ไม่นับ NULL, COUNT(*) นับทุกแถว