MySQL में WHERE क्लॉज में एग्रीगेट फ़ंक्शन का सही उपयोग
आप सीधे WHERE क्लॉज में AVG(), SUM(), COUNT() जैसे एग्रीगेट फ़ंक्शन का उपयोग नहीं कर सकते। इसके लिए सबक्वेरी का उपयोग करें।
गलत तरीका (त्रुटि 1111)
-- यह त्रुटि देगा: ERROR 1111 (HY000): Invalid use of group function SELECT * FROM EmployeeInformation WHERE EmployeeSalary > AVG(EmployeeSalary);
सही तरीका: सबक्वेरी का उपयोग
SELECT * FROM yourTableName WHERE yourColumnName > (SELECT AVG(yourColumnName) FROM yourTableName);
उदाहरण
टेबल बनाएं:
mysql> create table EmployeeInformation (
-> EmployeeId int,
-> EmployeeName varchar(20),
-> EmployeeSalary int,
-> EmployeeDateOfBirth datetime
-> );
डेटा डालें:
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
-> where EmployeeSalary > (select AVG(EmployeeSalary) from EmployeeInformation);
परिणाम:
+------------+--------------+----------------+---------------------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeDateOfBirth | +------------+--------------+----------------+---------------------+ | 105 | Bob | 7500 | 1993-11-26 00:00:00 | +------------+--------------+----------------+---------------------+
क्यों सबक्वेरी आवश्यक है?
- WHERE क्लॉज पंक्ति-दर-पंक्ति मूल्यांकन होता है (एग्रीगेट उपलब्ध नहीं)
- एग्रीगेट फ़ंक्शन GROUP BY के बाद समूहों पर काम करते हैं
- सबक्वेरी पहले एग्रीगेट मान की गणना करती है, फिर मुख्य क्वेरी उसका उपयोग करती है
HAVING क्लॉज का उपयोग
यदि GROUP BY के बाद फ़िल्टर करना है, तो HAVING का उपयोग करें:
SELECT Department, AVG(Salary) FROM Employees GROUP BY Department HAVING AVG(Salary) > 5000;