MySQL में विशिष्ट (DISTINCT) मानों के आधार पर औसत निकालने के लिए, सबक्वेरी में DISTINCT का उपयोग करके डुप्लिकेट हटाएं, फिर बाहरी क्वेरी में AVG() लागू करें।
उदाहरण: विशिष्ट छात्र-मान संयोजनों का औसत
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1934 (
StudentName VARCHAR(20),
StudentMarks INT
);
डुप्लिकेट डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1934 VALUES
('Chris', 56), ('Chris', 56), -- डुप्लिकेट
('David', 78), ('David', 78), -- डुप्लिकेट
('Carol', 45);
डेटा (डुप्लिकेट के साथ):
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | Chris | 56 | | Chris | 56 | | David | 78 | | David | 78 | | Carol | 45 | +-------------+--------------+
सबक्वेरी में DISTINCT के साथ औसत:
mysql> SELECT AVG(tbl.StudentMarks)
FROM (
SELECT DISTINCT StudentName, StudentMarks
FROM DemoTable1934
) AS tbl;
आउटपुट:
+-----------------------+ | avg(tbl.StudentMarks) | +-----------------------+ | 59.6667 | +-----------------------+
गणना समझाया
विशिष्ट (StudentName, StudentMarks) जोड़े:
- (Chris, 56) → 56
- (David, 78) → 78
- (Carol, 45) → 45
औसत = (56 + 78 + 45) / 3 = 179 / 3 = 59.6667
तुलना: DISTINCT के बिना
SELECT AVG(StudentMarks) FROM DemoTable1934; -- 62.6 (सभी 5 पंक्तियाँ)
वैकल्पिक दृष्टिकोण
MySQL 8.0+ CTE के साथ
WITH distinct_marks AS (
SELECT DISTINCT StudentMarks FROM DemoTable1934
)
SELECT AVG(StudentMarks) FROM distinct_marks;
केवल विशिष्ट मार्क्स का औसत (छात्र की परवाह किए बिना)
SELECT AVG(DISTINCT StudentMarks) FROM DemoTable1934;
यह AVG(DISTINCT column) सिंटैक्स सीधे काम करता है लेकिन कॉलम स्तर पर विशिष्टता लागू करता है, पंक्ति स्तर पर नहीं।
कब उपयोग करें
- डुप्लिकेट डेटा एंट्री को नजरअंदाज करके वास्तविक औसत निकालना
- विशिष्ट (उत्पाद, ग्राहक) संयोजनों पर मीट्रिक गणना
- डेटा क्वालिटी विश्लेषण
सावधानी
सबक्वेरी दृष्टिकोण बड़ी टेबल्स पर अस्थायी टेबल बना सकता है। उचित इंडेक्स सुनिश्चित करें और बड़े डेटासेट के लिए CTE या अस्थायी टेबल पर विचार करें।