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

MySQL-এ DISTINCT কলাম থেকে গড় (AVG) বের করা

ডুপ্লিকেট রো বাদ দিয়ে শুধু অনন্য (distinct) মানগুলোর গড় বের করতে AVG(DISTINCT column) বা সাবকোয়েরি ব্যবহার করা হয়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1934 (
    StudentName VARCHAR(20),
    StudentMarks INT
);

mysql> INSERT INTO DemoTable1934 VALUES
    ('Chris', 56), ('Chris', 56), ('David', 78), ('David', 78), ('Carol', 45);

ডেটা যাচাই

mysql> SELECT * FROM DemoTable1934;
+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           56 |
| Chris       |           56 |
| David       |           78 |
| David       |           78 |
| Carol       |           45 |
+-------------+--------------+

পদ্ধতি ১: সাবকোয়েরি দিয়ে DISTINCT ROW-এ AVG

mysql> SELECT AVG(tbl.StudentMarks)
    FROM (
        SELECT DISTINCT StudentName, StudentMarks
        FROM DemoTable1934
    ) AS tbl;

আউটপুট: 59.6667 (৫৬, ৭৮, ৪৫ এর গড়)

পদ্ধতি ২: AVG(DISTINCT ...) — শুধু কলাম মান ভিন্ন হলে

SELECT AVG(DISTINCT StudentMarks) FROM DemoTable1934;

ফলাফল: একই (৫৬, ৭৮, ৪৫ এর গড়)। কিন্তু এটি **কলাম লেভেলে** ডিস্টিংクト করে, রো লেভেলে নয়। যদি `('Chris',56)` এবং `('David',56)` থাকে, তবে `AVG(DISTINCT StudentMarks)` ৫৬ একবারই গুনবে — যা চাওয়া ফলাফল নাও হতে পারে।

কোনটি ব্যবহার করবেন?

  • সাবকোয়েরি (পদ্ধতি ১): যখন পুরো রো (কলাম কম্বিনেশন) ডিস্টিংクト করতে চান। নিরাপদ ও স্পষ্ট।
  • AVG(DISTINCT col): শুধু সেটি কলামের অনন্য মানের গড় দরকার হলে।

পারফরম্যান্স

সাবকোয়েরি একটি টেম্পোরারি টেবিল তৈরি করতে পারে। বড় ডেটাসেটে ইন্ডেক্স `(StudentName, StudentMarks)` দিয়ে অপ্টিমাইজ করুন।

  1. MySQL-এ TIMESTAMP কলাম থেকে শুধু তারিখ বের করা (DATE())

  2. MySQL-এ DISTINCT এবং ORDER BY MAX() দিয়ে আইডি অনুযায়ী সাজানো

  3. MySQL কোয়েরি: 00:00 থেকে আজকের তারিখ পর্যন্ত ডেটা নির্বাচন করা

  4. MySQL-এ SELECT কোয়েরি থেকে নির্দিষ্ট কলামের রেকর্ড কীভাবে পেতে হয়?