डुप्लिकेट IDs के लिए औसत और अधिकतम औसत खोजना
जब आपके पास डुप्लिकेट IDs हों और आप प्रत्येक ID का औसत निकालकर उनमें से अधिकतम औसत खोजना चाहें, तो MySQL में AVG(), MAX() और GROUP BY का संयोजन उपयोग करें।
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> PlayerId INT,
-> PlayerScore INT
-> );
Query OK, 0 rows affected (0.55 sec)
mysql> INSERT INTO DemoTable VALUES (1,78);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES (2,82);
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO DemoTable VALUES (1,45);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES (3,97);
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable VALUES (2,79);
Query OK, 1 row affected (0.12 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
| 1 | 78 |
| 2 | 82 |
| 1 | 45 |
| 3 | 97 |
| 2 | 79 |
+----------+-------------+
5 rows in set (0.00 sec)
औसत 80 से अधिक वाले PlayerIds खोजने का क्वेरी
mysql> SELECT PlayerId FROM DemoTable
-> GROUP BY PlayerId
-> HAVING AVG(PlayerScore) > 80;
परिणाम
+----------+
| PlayerId |
+----------+
| 2 |
| 3 |
+----------+
2 rows in set (0.00 sec)
व्याख्या
- GROUP BY PlayerId: समान PlayerId वाली पंक्तियों को समूहित करता है
- AVG(PlayerScore): प्रत्येक समूह के लिए औसत स्कोर गणना करता है
- HAVING AVG(PlayerScore) > 80: केवल उन समूहों को फ़िल्टर करता है जिनका औसत 80 से अधिक है
गणना विवरण
| PlayerId | स्कोर्स | औसत |
|---|---|---|
| 1 | 78, 45 | 61.5 |
| 2 | 82, 79 | 80.5 |
| 3 | 97 | 97 |
केवल PlayerId 2 (औसत 80.5) और 3 (औसत 97) की शर्त पूरी करते हैं।
अधिकतम औसत मान प्राप्त करने के लिए
SELECT PlayerId, AVG(PlayerScore) AS AvgScore
FROM DemoTable
GROUP BY PlayerId
ORDER BY AvgScore DESC
LIMIT 1;
यह उच्चतम औसत स्कोर वाला PlayerId लौटाएगा।