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

MySQL-এ ERROR 1111 সমাধান: WHERE ক্লজে অগ্রেগেট ফাংশন সঠিকভাবে ব্যবহার করা

MySQL-এ WHERE ক্লজে সরাসরি অগ্রেগেট ফাংশন (যেমন AVG(), SUM()) ব্যবহার করলে ERROR 1111 (HY000): Invalid use of group function এরর আসে। সমাধান: সাবকোয়েরি ব্যবহার করুন।

ভুল পদ্ধতি (এরর দেবে)

SELECT * FROM EmployeeInformation WHERE EmployeeSalary > AVG(EmployeeSalary);
ERROR 1111 (HY000): Invalid use of group function

সঠিক পদ্ধতি: সাবকোয়েরি ব্যবহার

SELECT * FROM yourTableName 
WHERE yourColumnName > (SELECT AVG(yourColumnName) FROM yourTableName);

উদাহরণ দিয়ে বুঝি

টেবিল তৈরি করুন:

mysql> CREATE TABLE EmployeeInformation (
    -> EmployeeId INT,
    -> EmployeeName VARCHAR(20),
    -> EmployeeSalary INT,
    -> EmployeeDateOfBirth DATETIME
    -> );
Query OK, 0 rows affected (1.08 sec)

রেকর্ড ইনসার্ট করুন:

mysql> INSERT INTO EmployeeInformation VALUES(101, 'John', 5510, '1995-01-21');
mysql> INSERT INTO EmployeeInformation VALUES(102, 'Carol', 5600, '1992-03-25');
mysql> INSERT INTO EmployeeInformation VALUES(103, 'Mike', 5680, '1991-12-25');
mysql> INSERT INTO EmployeeInformation VALUES(104, 'David', 6000, '1991-12-25');
mysql> INSERT INTO EmployeeInformation VALUES(105, 'Bob', 7500, '1993-11-26');

সকল রেকর্ড:

mysql> SELECT * FROM EmployeeInformation;
+------------+--------------+----------------+---------------------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeDateOfBirth |
+------------+--------------+----------------+---------------------+
|        101 | John         |           5510 | 1995-01-21 00:00:00 |
|        102 | Carol        |           5600 | 1992-03-25 00:00:00 |
|        103 | Mike         |           5680 | 1991-12-25 00:00:00 |
|        104 | David        |           6000 | 1991-12-25 00:00:00 |
|        105 | Bob          |           7500 | 1993-11-26 00:00:00 |
+------------+--------------+----------------+---------------------+
5 rows in set (0.00 sec)

গড় বেতন (AVG) এর চেয়ে বেশি বেতন পাওয়া কর্মী বের করুন

mysql> SELECT * FROM EmployeeInformation 
    -> WHERE EmployeeSalary > (SELECT AVG(EmployeeSalary) FROM EmployeeInformation);
+------------+--------------+----------------+---------------------+
| EmployeeId | EmployeeName | EmployeeSalary | EmployeeDateOfBirth |
+------------+--------------+----------------+---------------------+
|        105 | Bob          |           7500 | 1993-11-26 00:00:00 |
+------------+--------------+----------------+---------------------+
1 row in set (0.04 sec)

ব্যাখ্যা: সাবকোয়েরি (SELECT AVG(EmployeeSalary) FROM EmployeeInformation) প্রথমে একক মান (গড় বেতন) রিটার্ন করে, তারপর আউটার কোয়েরি সেটির সাথে তুলনা করে।

HAVING ক্লজ (GROUP BY থাকলে)

যদি GROUP BY থাকে, তবে অগ্রেগেট ফাংশন HAVING ক্লজে ব্যবহার করুন:

SELECT Department, AVG(Salary) 
FROM Employees 
GROUP BY Department 
HAVING AVG(Salary) > 50000;
  1. MySQL-এ DISTINCT ক্লজ WHERE এবং LIMIT ক্লজের সাথে কীভাবে ব্যবহার করবেন?

  2. MySQL-এ অ‍্যাগ্রিগেট ফাংশন ছাড়া GROUP BY ক্লজ কীভাবে কাজ করে?

  3. MySQL-এ WITH ROLLUP সঠিকভাবে ব্যবহার করা

  4. MySQL VIEW-এ WHERE ক্লজ ব্যবহার করা