ใช้ GROUP BY ร่วม COUNT() และ ORDER BY COUNT(*) DESC เพื่อหาค่าที่ซ้ำมากที่สุด
ตัวอย่างการใช้งาน
1. สร้างตารางข้อความโพสต์
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PostMessage VARCHAR(100)
-> );
mysql> INSERT INTO DemoTable(PostMessage) VALUES
('Hi'), ('Hello'), ('Hi'), ('Awesome'), ('Hello'), ('Hi'), ('Awesome');
2. นับและเรียงตามจำนวนมากไปน้อย
mysql> SELECT PostMessage, COUNT(Id) FROM DemoTable
-> GROUP BY PostMessage ORDER BY COUNT(Id) DESC;
ผลลัพธ์
+-------------+-----------+ | PostMessage | COUNT(Id) | +-------------+-----------+ | Hi | 3 | | Hello | 2 | | Awesome | 2 | +-------------+-----------+
แสดงเฉพาะค่าที่ซ้ำมากที่สุด (Top 1)
SELECT PostMessage, COUNT(Id) AS cnt FROM DemoTable GROUP BY PostMessage ORDER BY cnt DESC LIMIT 1;
แสดงเฉพาะค่าที่ซ้ำเกิน 2 ครั้ง
SELECT PostMessage, COUNT(Id) FROM DemoTable GROUP BY PostMessage HAVING COUNT(Id) > 2;
ผลลัพธ์
+-------------+-----------+ | PostMessage | COUNT(Id) | +-------------+-----------+ | Hi | 3 | +-------------+-----------+
ประสิทธิภาพ: สร้าง Index
CREATE INDEX idx_postmsg ON DemoTable(PostMessage);