কম্পিউটার টিউটোরিয়াল

MySQL-এ ORDER BY COUNT(*) DESC LIMIT 1 দিয়ে সর্বাধিক ফ্রিকোয়েন্সি वाला মান বের করা

কোনো কলামে সবচেয়ে বেশিবার আসা মান (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 কলামে ইন্ডেক্স থাকলে গ্রুপিং ও কাউন্টিং দ্রুত হবে।

  1. Java-এ JDBC ResultSetMetaData ব্যবহার করে MySQL টেবিলের কলাম সংখ্যা বের করা

  2. MySQL স্টোরড প্রোসিডিউরে SELECT ব্যবহার করে পুরো টেবিল রিটার্ন করা

  3. MySQL-এ GROUP BY ব্যবহার করে ফিল্ড আপডেট করা

  4. MySQL-এ GROUP_CONCAT ব্যবহার করে একাধিক রোকে এক ফিল্ডে জোড়া দেওয়া