MySQL में AVG() फ़ंक्शन का उपयोग करके स्तंभ औसत गणना करना
MySQL का AVG() एग्रीगेट फ़ंक्शन एक संख्यात्मक कॉलम के सभी गैर-NULL मानों का अंकगणितीय औसत (मतलब) गणना करता है। यह एकल क्वेरी में एकाधिक कॉलम्स पर लागू किया जा सकता है।
सिंटैक्स
SELECT
AVG(yourColumnName1) AS alias1,
AVG(yourColumnName2) AS alias2,
...
FROM yourTableName;
टेबल बनाना
mysql> CREATE TABLE demo31 (
-> value1 INT,
-> value2 INT,
-> value3 INT
-> );
Query OK, 0 rows affected (2.27 sec)
डेटा डालना
mysql> INSERT INTO demo31 VALUES (34, 55, 67);
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO demo31 VALUES (50, 60, 70);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO demo31 VALUES (100, 200, 300);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO demo31 VALUES (10, 300, 200);
Query OK, 1 row affected (0.15 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM demo31;
+--------+--------+--------+
| value1 | value2 | value3 |
+--------+--------+--------+
| 34 | 55 | 67 |
| 50 | 60 | 70 |
| 100 | 200 | 300 |
| 10 | 300 | 200 |
+--------+--------+--------+
4 rows in set (0.00 sec)
सभी तीन कॉलम्स के लिए औसत गणना करने का क्वेरी
mysql> SELECT
-> AVG(value1) AS Value1_AVG,
-> AVG(value2) AS Value2_AVG,
-> AVG(value3) AS Value3_AVG
-> FROM demo31;
परिणाम
+------------+------------+------------+
| Value1_AVG | Value2_AVG | Value3_AVG |
+------------+------------+------------+
| 48.5000 | 153.7500 | 159.2500 |
+------------+------------+------------+
1 row in set (0.00 sec)
मैन्युअल सत्यापन
| कॉलम | मान | योग | गिनती | औसत |
|---|---|---|---|---|
| value1 | 34, 50, 100, 10 | 194 | 4 | 48.5 |
| value2 | 55, 60, 200, 300 | 615 | 4 | 153.75 |
| value3 | 67, 70, 300, 200 | 637 | 4 | 159.25 |
AVG() महत्वपूर्ण व्यवहार
- NULL मानों को अनदेखा करता है: केवल गैर-NULL मानों पर औसत गणना करता है
- दशमलव लौटाता है: पूर्णांक कॉलम के लिए भी DECIMAL लौटाता है
- खाली सेट: कोई पंक्ति नहीं या सभी NULL होने पर NULL लौटाता है
NULL संचालन उदाहरण
mysql> SELECT AVG(col) FROM (SELECT 10 AS col UNION SELECT NULL UNION SELECT 20) t;
-- परिणाम: 15 (केवल 10 और 20 का औसत, NULL अनदेखा)
GROUP BY के साथ औसत
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department;
सशर्त औसत
-- केवल उच्च वेतन का औसत
SELECT AVG(CASE WHEN Salary > 50000 THEN Salary END) AS AvgHighSalary
FROM Employees;
-- या FILTER क्लॉज (MySQL 8.0+ समर्थित नहीं, PostgreSQL में)
-- MySQL विकल्प:
SELECT AVG(IF(Salary > 50000, Salary, NULL)) FROM Employees;
भारित औसत
SELECT SUM(value * weight) / SUM(weight) AS WeightedAvg
FROM Data;
चलती औसत (विंडो फ़ंक्शन, MySQL 8.0+)
SELECT
Date,
Value,
AVG(Value) OVER (ORDER BY Date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS MovingAvg7Day
FROM TimeSeriesData;
सर्वोत्तम अभ्यास
- NULL मानों को स्पष्ट रूप से संभालें यदि वे सार्थक हैं
- बड़े डेटासेट के लिए, इंडेक्स्ड कॉलम्स पर औसत पर विचार करें
- परिशुद्धता आवश्यकताओं के लिए DECIMAL परिशुद्धता/स्केल जांचें
- आउटलेयर्स के लिए MEDIAN (MySQL में PERCENTILE_CONT के माध्यम से) पर विचार करें