Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में ERROR 1111: Invalid use of group function कैसे हल करें? WHERE क्लॉज में एग्रीगेट फ़ंक्शन का सही उपयोग


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;
  1. - एग्रीगेट फंक्शन के बिना GROUP BY क्लॉज कैसे प्रदर्शन करेगा?

    जब हम SELECT स्टेटमेंट में एग्रीगेट फंक्शन का उपयोग किए बिना GROUP BY क्लॉज का उपयोग करते हैं तो यह DISTINCT क्लॉज की तरह व्यवहार करेगा। उदाहरण के लिए, हमारे पास निम्न टेबल है - mysql> Select * from Student_info; +------+---------+------------+------------+ | id   | Name    | Ad

  1. - MySQL में WITH ROLLUP का सही उपयोग कैसे करें

    WITH ROLLUP के साथ योग और कुल योग प्राप्त करना WITH ROLLUP का सिंटैक्स: select yourColumnName1, sum(yourColumnName2) from yourTableName group by yourColumnName1 with rollup; पहले टेबल बनाएं: create table DemoTable1622 ( EmployeeCountryName varchar(20), EmployeeSalary int ); Query OK, 0 rows affecte

  1. - MySQL VIEW में WHERE क्लॉज का उपयोग कैसे करें?

    MySQL VIEW पर WHERE क्लॉज लागू करना MySQL VIEW एक आभासी टेबल है जो एक SELECT क्वेरी के परिणाम सेट पर आधारित होती है। आप किसी भी नियमित टेबल की तरह VIEW पर WHERE क्लॉज लागू करके परिणामों को फ़िल्टर कर सकते हैं। उदाहरण: छात्र VIEW बनाना और फ़िल्टर करना पहले एक छात्र टेबल बनाते हैं: SELECT * FROM Dem