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

MySQL में DISTINCT कॉलम से औसत कैसे चुनें?

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 या अस्थायी टेबल पर विचार करें।

  1. - MySQL में GROUP BY MAX() का उपयोग करके DISTINCT मानों को ID के अवरोही क्रम में चुनना

    MySQL में GROUP BY और ORDER BY MAX() का उपयोग करके विशिष्ट मान चुनें और उन्हें अधिकतम ID के अवरोही क्रम में क्रमबद्ध करें। उदाहरण: टेबल बनाना और डुप्लिकेट डेटा डालना mysql> CREATE TABLE DemoTable ( -> Id INT, -> Name VARCHAR(100) -> ); Query OK, 0 rows affected (0.81 sec)

  1. - MySQL में आज की तारीख 00:00 से वर्तमान समय तक की तारीख चुनें

    DATE(NOW()) (आज 00:00:00) और NOW() (वर्तमान डेटाटाइम) के बीच BETWEEN या तुलना ऑपरेटर का उपयोग करके आज के रिकॉर्ड फ़िल्टर करें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable (DueDate DATETIME); Query OK, 0 rows affected (0.66 sec) INSERT INTO DemoTable VALUES(2019-09-14),(2019-09-14 08:00:10),

  1. - MySQL में SELECT क्वेरी से विशिष्ट कॉलम रिकॉर्ड कैसे प्राप्त करें?

    MySQL में किसी टेबल से केवल विशिष्ट कॉलम के डेटा को प्राप्त करना बहुत आसान है। इसके लिए SELECT * के बजाय केवल उस कॉलम का नाम लिखें जिसे आप देखना चाहते हैं। उदाहरण के साथ समझें सबसे पहले एक डेमो टेबल बनाते हैं: mysql> CREATE TABLE DemoTable1837 ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY