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

MySQL में HAVING क्लॉज से डुप्लिकेट नामों के औसत स्कोर की गणना और क्रमबद्ध करें

MySQL में डुप्लिकेट नाम वाले रिकॉर्ड के औसत स्कोर की गणना करने और शर्त के साथ फ़िल्टर करने के लिए GROUP BY के साथ HAVING क्लॉज का उपयोग करें। WHERE एग्रीगेट फ़ंक्शन (AVG) के साथ काम नहीं करता; HAVING समूहन के **बाद** फ़िल्टर करता है।

सिंटैक्स

SELECT name_column, AVG(score_column) AS avg_score
FROM table_name
GROUP BY name_column
HAVING AVG(score_column) < threshold
ORDER BY AVG(score_column);

व्यावहारिक उदाहरण

टेबल बनाएं:

mysql> CREATE TABLE DemoTable1338 (Name VARCHAR(10), Score INT);

डुप्लिकेट नामों के साथ डेटा डालें:

mysql> INSERT INTO DemoTable1338 VALUES('Chris', 8);
mysql> INSERT INTO DemoTable1338 VALUES('Bob', 4);
mysql> INSERT INTO DemoTable1338 VALUES('Bob', 9);
mysql> INSERT INTO DemoTable1338 VALUES('Chris', 6);
mysql> INSERT INTO DemoTable1338 VALUES('David', 5);
mysql> INSERT INTO DemoTable1338 VALUES('David', 7);

डेटा देखें:

mysql> SELECT * FROM DemoTable1338;
+-------+-------+
| Name  | Score |
+-------+-------+
| Chris | 8     |
| Bob   | 4     |
| Bob   | 9     |
| Chris | 6     |
| David | 5     |
| David | 7     |
+-------+-------+

औसत स्कोर 9.5 से कम वाले नाम, औसत के अनुसार क्रमबद्ध

mysql> SELECT Name, AVG(Score) FROM DemoTable1338
    -> GROUP BY Name
    -> HAVING AVG(Score) < 9.5
    -> ORDER BY AVG(Score);

परिणाम

+-------+------------+
| Name  | avg(Score) |
+-------+------------+
| David | 6.0000     |
| Bob   | 6.5000     |
| Chris | 7.0000     |
+-------+------------+

WHERE बनाम HAVING

चरण-दर-चरण

  1. GROUP BY Name - नाम के अनुसार समूह बनाएं: Chris (2 पंक्तियां), Bob (2), David (2)
  2. AVG(Score) - प्रत्येक समूह का औसत: Chris=7, Bob=6.5, David=6
  3. HAVING AVG(Score) < 9.5 - सभी 3 समूह पास (सभी < 9.5)
  4. ORDER BY AVG(Score) - औसत द्वारा आरोही: David (6), Bob (6.5), Chris (7)

एलियास का उपयोग HAVING/ORDER BY में

SELECT Name, AVG(Score) AS AvgScore
FROM DemoTable1338
GROUP BY Name
HAVING AvgScore < 9.5
ORDER BY AvgScore;

MySQL एलियास को HAVING और ORDER BY में उपयोग करने की अनुमति देता है (मानक SQL में नहीं)।

उन्नत: एकाधिक एग्रीगेट शर्तें

SELECT Name, AVG(Score) AS AvgScore, COUNT(*) AS Cnt
FROM DemoTable1338
GROUP BY Name
HAVING AvgScore > 5 AND Cnt >= 2
ORDER BY AvgScore DESC;

उपयोग के मामले

  • छात्र ग्रेड: औसत < 60 वाले छात्र खोजें
  • बिक्री: औसत ऑर्डर मूल्य > $100 वाले ग्राहक
  • गुणवत्ता: दोष दर > 5% वाले बैच
  • खेल: औसत स्कोर थ्रेशोल्ड से ऊपर वाले खिलाड़ी

सारांश

  • GROUP BY पंक्तियों को समूहित करता है
  • AVG() प्रत्येक समूह का औसत गणना करता है
  • HAVING एग्रीगेट परिणाम पर फ़िल्टर करता है
  • ORDER BY अंतिम परिणाम क्रमबद्ध करता है
  • WHERE एग्रीगेट के लिए **काम नहीं करता** - HAVING उपयोग करें

यह पैटर्न "प्रति समूह एग्रीगेट, फिर फ़िल्टर" विश्लेषणात्मक SQL का मूल है।

  1. - MySQL में AND ऑपरेटर का उपयोग करके विशिष्ट रिकॉर्ड कैसे हटाएं?

    MySQL में DELETE स्टेटमेंट के WHERE क्लॉज में AND ऑपरेटर का उपयोग करके एकाधिक शर्तों के आधार पर विशिष्ट पंक्तियों को हटाया जा सकता है। सिंटैक्स DELETE FROM table_name WHERE condition1 AND condition2 AND ...; उदाहरण तालिका बनाएं और डेटा डालें: mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(

  1. - MySQL क्वेरी डुप्लिकेट टुपल्स खोजने और गिनती प्रदर्शित करने के लिए?

    डुप्लिकेट टुपल्स खोजने के लिए GROUP BY HAVING क्लॉज का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into De

  1. - MySQL में GROUP BY HAVING से डुप्लिकेट कॉलम मान खोजें और प्रदर्शित करें

    किसी कॉलम में डुप्लिकेट मान (एक से अधिक बार आने वाले) खोजने के लिए GROUP BY और 1 का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1858 (ModelNumber VARCHAR(50)); डेटा डालें mysql> INSERT INTO DemoTable1858 VALUES(Audi A4), (Audi A6), (Audi A4), (Audi Q5), (Audi R8), (Audi Q5); डुप्लि

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
क्लॉजलागू होता हैएग्रीगेट फ़ंक्शनकब उपयोग करें
WHEREव्यक्तिगत पंक्तियां (समूहन से पहले)❌ उपयोग नहीं कर सकतेपंक्ति-स्तरीय फ़िल्टर
HAVINGसमूह (समूहन के बाद)✅ उपयोग कर सकते हैंसमूह-स्तरीय फ़िल्टर