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

วิธีนับจำนวนค่าที่เกิดบ่อยที่สุดใน MySQL

ใช้ COUNT() กับ GROUP BY แล้วเรียงลำดับหาค่าที่มากที่สุด

จัดกลุ่มตามค่า นับจำนวนในแต่ละกลุ่ม แล้วเรียงจากมากไปน้อย (DESC) ค่าบนสุดคือค่าที่เกิดบ่อยที่สุด (Mode)

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

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value INT
);

INSERT INTO DemoTable (Value) VALUES
(976), (67), (67), (1), (90), (1), (67), (976), (90), (1), (10);

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

+----+-------+
| Id | Value |
+----+-------+
| 1  | 976   |
| 2  | 67    |
| 3  | 67    |
| 4  | 1     |
| 5  | 90    |
| 6  | 1     |
| 7  | 67    |
| 8  | 976   |
| 9  | 90    |
| 10 | 1     |
| 11 | 10    |
+----+-------+

คำสั่งนับและเรียงหาค่าที่พบบ่อยสุด

SELECT Value, COUNT(Value) AS ValueFrequency
FROM DemoTable
GROUP BY Value
ORDER BY ValueFrequency DESC;

ผลลัพธ์

+-------+----------------+
| Value | ValueFrequency |
+-------+----------------+
| 67    | 3              |
| 1     | 3              |
| 90    | 2              |
| 976   | 2              |
| 10    | 1              |
+-------+----------------+

คำอธิบาย: 67 และ 1 พบ 3 ครั้ง (มากที่สุด) 90 และ 976 พบ 2 ครั้ง 10 พบ 1 ครั้ง

ดูเฉพาะค่าที่มากที่สุด (Top 1):

SELECT Value, COUNT(*) AS freq
FROM DemoTable
GROUP BY Value
ORDER BY freq DESC
LIMIT 1;

กรณีมีหลายค่าเท่ากันมากสุด (Multiple Modes) ต้องการทั้งหมด:

SELECT Value, COUNT(*) AS freq
FROM DemoTable
GROUP BY Value
HAVING freq = (SELECT MAX(freq) FROM (SELECT COUNT(*) AS freq FROM DemoTable GROUP BY Value) t);

⚐ ประสิทธิภาพ: สร้าง Index บนคอลัมน์ Value: CREATE INDEX idx_value ON DemoTable(Value); ช่วยให้ GROUP BY เร็วขึ้น