কোনো কলামে সবচেয়ে বেশিবার আসা মান (Mode) বের করতে GROUP BY করে COUNT(*) অনুযায়ী ডিসেন্ডিং সর্ট করে LIMIT 1 নেওয়া হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1940 (FirstName VARCHAR(20));
mysql> INSERT INTO DemoTable1940 VALUES
('Chris'), ('Mike'), ('Adam'), ('Mike'), ('Chris'), ('David'), ('Mike');
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1940;
+-----------+ | FirstName | +-----------+ | Chris | | Mike | | Adam | | Mike | | Chris | | David | | Mike | +-----------+
কোয়েরি: সর্বাধিক ফ্রিকোয়েন্সি वाला নাম
mysql> SELECT FirstName
FROM DemoTable1940
GROUP BY FirstName
ORDER BY COUNT(*) DESC
LIMIT 1;
আউটপুট:
+-----------+ | FirstName | +-----------+ | Mike | +-----------+
ব্যাখ্যা
GROUP BY FirstName— নাম অনুযায়ী গ্রুপ।COUNT(*)— প্রতিটি গ্রুপের সারি সংখ্যা।ORDER BY COUNT(*) DESC— সর্বোচ্চ ফ্রিকোয়েন্সি উপরে।LIMIT 1— শুধু শীর্ষ ১টি।
টাই (Tie) হ্যান্ডলিং
যদি একাধিক মান একই সর্বোচ্চ ফ্রিকোয়েন্সি রাখে (যেমন Mike এবং Chris দুইটোই ৩ বার), তবে LIMIT 1 শুধু একটা দেবে (নিরবিচারে)। সবগুলো পেতে:
SELECT FirstName, COUNT(*) AS freq FROM DemoTable1940 GROUP BY FirstName HAVING freq = (SELECT MAX(freq) FROM (SELECT COUNT(*) AS freq FROM DemoTable1940 GROUP BY FirstName) t);
MySQL 8.0+ এ RANK() ব্যবহার
WITH ranked AS (
SELECT FirstName, COUNT(*) AS freq,
RANK() OVER (ORDER BY COUNT(*) DESC) AS rk
FROM DemoTable1940
GROUP BY FirstName
)
SELECT FirstName, freq FROM ranked WHERE rk = 1;
পারফরম্যান্স
FirstName কলামে ইন্ডেক্স থাকলে গ্রুপিং ও কাউন্টিং দ্রুত হবে।