ใช้ 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 เร็วขึ้น