MySQL एग्रीगेट फ़ंक्शन: SUM, COUNT, AVG & मैक्स

⚡ स्मार्ट सारांश

समग्र कार्य MySQL एक ही कॉलम की कई पंक्तियों पर गणना करें और एक सारांशित मान लौटाएँ। पाँच ISO मानक फ़ंक्शन — COUNT, SUM, AVGMIN, MIN और MAX - डेटाबेस द्वारा तैयार की जाने वाली लगभग हर रिपोर्ट को शक्ति प्रदान करते हैं।

  • 🔢 COUNT व्यवहार: COUNT(column) NULL मानों को अनदेखा करता है, जबकि COUNT(*) तालिका की प्रत्येक पंक्ति की गणना करता है, जिसमें डुप्लिकेट और NULL मान भी शामिल हैं।
  • 🚫 विशिष्ट कीवर्ड: DISTINCT गणना चलने से पहले डुप्लिकेट मानों को हटा देता है; ALL डिफ़ॉल्ट है और उन्हें बनाए रखता है।
  • 📉 न्यूनतम और अधिकतम: MIN किसी कॉलम में सबसे छोटा मान लौटाता है और MAX सबसे बड़ा मान लौटाता है, चाहे वह संख्यात्मक, स्ट्रिंग या दिनांक प्रकार का मान हो।
  • योग और AVG: ये दोनों विधियाँ केवल संख्यात्मक स्तंभों पर ही कार्य करती हैं, और दोनों ही परिणाम में NULL पंक्तियों को शामिल नहीं करती हैं।
  • 📊 जोड़ी बनाकर समूह बनाएं: GROUP BY जोड़ने से एक ही सारांश चित्र प्रति समूह एक सारांश पंक्ति में बदल जाता है।
  • ⚠️ नल ट्रैप: AVG यह केवल गैर-NULL पंक्तियों की संख्या से भाग देता है, इसलिए गुम मान चुपचाप औसत को बढ़ा देते हैं।

एग्रीगेट फ़ंक्शन क्या होते हैं? MySQL?

An कुल कार्य यह फ़ंक्शन एक ही कॉलम की कई पंक्तियों को पढ़ता है और उन्हें एक मान में परिवर्तित कर देता है। एग्रीगेट फ़ंक्शन का मुख्य कार्य है:

  • कई पंक्तियों पर गणना करना
  • किसी तालिका के एक एकल स्तंभ का
  • और एकल मान लौटाना.

आईएसओ मानक पाँच (5) समग्र कार्यों को परिभाषित करता है, अर्थात्:

  1. COUNT
  2. SUM
  3. AVG
  4. न्यूनतम
  5. मैक्स

इन पांचों पर एक ही नियम लागू होता है: एग्रीगेट फ़ंक्शन NULL मानों को अनदेखा करते हैंCOUNT(*) एकमात्र अपवाद है, और हम नीचे देखेंगे कि ऐसा क्यों है।

एग्रीगेट फ़ंक्शन का उपयोग क्यों करें

संगठन के विभिन्न स्तरों की सूचना संबंधी आवश्यकताएं अलग-अलग होती हैं। शीर्ष स्तर के प्रबंधक आमतौर पर समग्र आंकड़ों में रुचि रखते हैं, न कि व्यक्तिगत विवरणों में।

समग्र फ़ंक्शन हमें अपने डेटाबेस से आसानी से सारांशित डेटा तैयार करने की अनुमति देते हैं।

उदाहरण के लिए, हमारे मायफ्लिक्स डेटाबेस से, प्रबंधन को निम्नलिखित रिपोर्टों की आवश्यकता हो सकती है:

  • सबसे कम किराये पर ली गई फिल्में.
  • सबसे अधिक किराये पर ली गई फिल्में.
  • एक माह में प्रत्येक फिल्म को औसतन कितनी बार किराए पर लिया जाता है।

उपरोक्त सभी रिपोर्टें एग्रीगेट फ़ंक्शन से प्राप्त हुई हैं। आइए प्रत्येक को विस्तार से देखें।

COUNT फ़ंक्शन

COUNT फ़ंक्शन निर्दिष्ट फ़ील्ड में मौजूद मानों की कुल संख्या लौटाता है, चाहे डेटा प्रकार संख्यात्मक हो या गैर-संख्यात्मक। अन्य सभी एग्रीगेट फ़ंक्शन की तरह, COUNT(column) NULL मानों को शामिल नहीं करता है।

COUNT(*) एक विशेष प्रकार का फ़ंक्शन है जो किसी तालिका में सभी पंक्तियों की संख्या लौटाता है। यह तालिका की पंक्तियों की संख्या भी गिनता है। शून्य और डुप्लिकेट को भी, क्योंकि यह मानों के बजाय पंक्तियों की गणना करता है।

मूवी रेंटल टेबल में यह डेटा मौजूद है:

संदर्भ संख्या कार्यवाही की तिथि वापसी दिनांक सदस्यता_ संख्या मूवी_आईडी मूवी_ वापस आ गई
11 20-06-2012 नल 1 1 0
12 22-06-2012 25-06-2012 1 2 0
13 22-06-2012 25-06-2012 3 2 0
14 21-06-2012 24-06-2012 2 2 0
15 23-06-2012 नल 3 3 0

मान लीजिए कि हम यह जानना चाहते हैं कि आईडी 2 वाली फिल्म को कितनी बार किराए पर दिया गया है।

SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;

इसे निष्पादित करना MySQL कार्यक्षेत्र myflixdb के विरुद्ध परिणाम 3 आता है, क्योंकि तीन पंक्तियों में movie_id 2 है।

COUNT(`movie_id`)
3

विशिष्ट कीवर्ड

COUNT का उत्तर है "कितने"। अगला प्रश्न आमतौर पर यही होता है "कितने"। विभिन्न “एक प्रकार का”, और यही DISTINCT का उद्देश्य है।

विशिष्ट कीवर्ड

DISTINCT कीवर्ड समूह के आधार पर हमारे परिणामों से डुप्लिकेट को हटा देता है।ping एक समान मानों को एक साथ रखना, ठीक वैसे ही जैसे ऊपर दिए गए उदाहरण में दर्शाया गया है।

सबसे पहले, आइए एक सरल क्वेरी को निष्पादित करें।

SELECT `movie_id` FROM `movierentals`;
मूवी_आईडी
1
2
2
2
3

अब DISTINCT कीवर्ड के साथ यही क्वेरी:

SELECT DISTINCT `movie_id` FROM `movierentals`;

DISTINCT डुप्लिकेट रिकॉर्ड को हटा देता है:

मूवी_आईडी
1
2
3

COUNT बनाम COUNT(*) बनाम COUNT(DISTINCT): आपको किसका उपयोग करना चाहिए?

DISTINCT को भी रखा जा सकता है अंदर यह एक एग्रीगेट फंक्शन है, और यहीं पर ज्यादातर शुरुआती लोग भ्रमित हो जाते हैं। tracजिनमें से वास्तव में k पंक्तियों की गणना की जाती है। नीचे दिए गए चारों फॉर्म पहले दिखाए गए पांच-पंक्ति वाले मूवी रेंटल टेबल पर चलते हैं, फिर भी वे सभी एक ही संख्या नहीं लौटाते हैं। यह अंतर दो सवालों पर आधारित है: क्या फॉर्म पंक्तियों या मानों की गणना करता है, और क्या यह डुप्लिकेट मानों को रखता है?

प्रपत्र इसका क्या महत्व है मूवी रेंटल पर परिणाम
गिनती करना(*) डुप्लिकेट पंक्तियों और पूरी तरह से NULL वाली पंक्तियों सहित प्रत्येक पंक्ति 5
COUNT(`movie_id`) कॉलम में मौजूद सभी गैर-NULL मान, डुप्लिकेट मानों सहित। 5
COUNT(`return_date`) केवल नॉन-NULL मान ही स्वीकार्य हैं — दो NULL मानों वाली वापसी तिथियों को छोड़ दिया जाएगा। 3
COUNT(DISTINCT `movie_id`) केवल अद्वितीय गैर-NULL मान 3
SELECT COUNT(*) AS `all_rows`,
       COUNT(`return_date`) AS `returned_rows`,
       COUNT(DISTINCT `movie_id`) AS `unique_movies`
FROM `movierentals`;

💡टिप: पंक्तियों की संख्या गिनने के लिए COUNT(*) का प्रयोग करें, जब NULL का अर्थ "लागू नहीं होता" हो तो COUNT(column) का प्रयोग करें, और अद्वितीय मानों के लिए COUNT(DISTINCT column) का प्रयोग करें। DISTINCT का विपरीत ALL है — यह डिफ़ॉल्ट मान है, इसलिए इसे शायद ही कभी लिखा जाता है।

MIN फ़ंक्शन

MIN फ़ंक्शन निर्दिष्ट तालिका फ़ील्ड में सबसे छोटा मान लौटाता है.

मान लीजिए कि हम वह वर्ष जानना चाहते हैं जिसमें हमारी लाइब्रेरी में मौजूद सबसे पुरानी फिल्म रिलीज हुई थी। MySQL's MIN फ़ंक्शन हमें वह जानकारी देता है।

SELECT MIN(`year_released`) FROM `movies`;

रिजल्ट:

MIN(`year_released`)
2005

अधिकतम समारोह

जैसा कि नाम से पता चलता है, MAX फ़ंक्शन MIN फ़ंक्शन के विपरीत है। निर्दिष्ट तालिका फ़ील्ड से सबसे बड़ा मान लौटाता है.

मान लीजिए कि हम अपने डेटाबेस में मौजूद नवीनतम फिल्म के रिलीज़ होने का वर्ष जानना चाहते हैं। निम्नलिखित उदाहरण इसे लौटाता है।

SELECT MAX(`year_released`) FROM `movies`;

रिजल्ट:

MAX(`year_released`)
2012

SUM फ़ंक्शन

MIN और MAX किसी कॉलम से मौजूदा मान चुनते हैं। SUM और AVG पूरे कॉलम से एक नई संख्या की गणना करें।

मान लीजिए कि हम अब तक किए गए कुल भुगतानों की राशि जानना चाहते हैं। MySQL SUM समारोह यह निर्दिष्ट कॉलम में मौजूद सभी मानों का योग लौटाता है।. SUM केवल संख्यात्मक फ़ील्ड पर काम करता है, तथा परिणाम में NULL मानों को शामिल नहीं किया जाता है।.

नीचे दी गई तालिका भुगतान तालिका में मौजूद डेटा को दर्शाती है।

भुगतान_आईडी सदस्यता_ संख्या भुगतान_ तिथि विवरण राशि का भुगतान बाह्य_ संदर्भ_ संख्या
1 1 23-07-2012 मूवी किराये का भुगतान 2500 11
2 1 25-07-2012 मूवी किराये का भुगतान 2000 12
3 3 30-07-2012 मूवी किराये का भुगतान 6000 नल

नीचे दी गई क्वेरी सभी किए गए भुगतानों को प्राप्त करती है और उन्हें एक ही परिणाम में जोड़ देती है: 2500 + 2000 + 6000 = 10500।

SELECT SUM(`amount_paid`) FROM `payments`;

रिजल्ट:

SUM(`भुगतान की गई राशि`)
10500

AVG समारोह

RSI MySQL AVG समारोह निर्दिष्ट कॉलम में मानों का औसत लौटाता हैSUM फ़ंक्शन की तरह, यह केवल संख्यात्मक डेटा प्रकारों पर काम करता है.

मान लीजिए कि हम भुगतान की गई औसत राशि ज्ञात करना चाहते हैं। हम निम्न क्वेरी का उपयोग कर सकते हैं, जो 10500 के कुल योग को तीन गैर-NULL भुगतान पंक्तियों से विभाजित करती है।

SELECT AVG(`amount_paid`) FROM `payments`;

रिजल्ट:

AVG(`भुगतान की गई राशि`)
3500

⚠️ चेतावनी: AVG यह तालिका की पंक्तियों की संख्या से नहीं, बल्कि गैर-NULL पंक्तियों की संख्या से भाग देता है। NULL मान को शून्य के रूप में गिनने के बजाय छोड़ दिया जाता है, जिससे औसत चुपचाप बढ़ जाता है। उपयोग करें AVG(IFNULL(`amount_paid`, 0)) जब एक गुम मान का मतलब शून्य होता है।

व्यावहारिक उदाहरण: एग्रीगेट फ़ंक्शंस को ग्रुप बाय के साथ संयोजित करना

ऊपर दिए गए प्रत्येक फ़ंक्शन ने पूरी तालिका के लिए एक आंकड़ा लौटाया। एक और जोड़ने पर... समूह द्वारा क्लॉज़ एक आंकड़ा लौटाता है प्रति समूह इसके बजाय—और इसी तरह से वास्तविक रिपोर्ट तैयार की जाती हैं।

निम्नलिखित उदाहरण सदस्यों को नाम के आधार पर समूहित करता है, फिर प्रत्येक सदस्य के लिए कुल भुगतानों की संख्या, औसत भुगतान राशि और भुगतान राशियों का कुल योग गिनता है।

SELECT m.`full_names`,
       COUNT(p.`payment_id`) AS `paymentscount`,
       AVG(p.`amount_paid`) AS `averagepaymentamount`,
       SUM(p.`amount_paid`) AS `totalpayments`
FROM members m, payments p
WHERE m.`membership_number` = p.`membership_number`
GROUP BY m.`full_names`;

उपरोक्त उदाहरण को क्रियान्वित करना MySQL वर्कबेंच से हमें निम्नलिखित परिणाम प्राप्त होते हैं।

AVG GROUP BY के साथ उपयोग किया जाने वाला फ़ंक्शन

क्वेरी WHERE क्लॉज़ में दो तालिकाओं को जोड़ती है — यह पुरानी कॉमा-जॉइन शैली है। आधुनिक कोड इसी लॉजिक को स्पष्ट रूप से लिखता है। आंतरिक जोड़ … चालूयह भी ध्यान दें कि SELECT सूची में प्रत्येक गैर-एकत्रित कॉलम GROUP BY में दिखाई देना चाहिए, या MySQL 5.7 और उसके बाद के संस्करण ONLY_FULL_GROUP_BY के अंतर्गत क्वेरी को अस्वीकार करते हैं। देखें सरकारी MySQL कुल फ़ंक्शन संदर्भ.

अक्सर पूछे जाने वाले प्रश्न

RSI कहां कारण एग्रीगेट की गणना से पहले फ़िल्टर व्यक्तिगत पंक्तियों को फ़िल्टर करता है। HAVING बाद में समूहीकृत परिणामों को फ़िल्टर करता है, इसलिए केवल HAVING ही COUNT(*) या SUM(amount_paid) जैसे एग्रीगेट को संदर्भित कर सकता है।

जी हां। ग्रुप बाय का उपयोग किए बिना, एग्रीगेट पूरे परिणाम सेट को एक समूह मानता है और केवल एक पंक्ति लौटाता है। ग्रुप बाय जोड़ने से परिणाम प्रत्येक अलग-अलग समूह मान के लिए एक पंक्ति में विभाजित हो जाता है।

हाँ। SUM और के विपरीत AVGMIN और MAX किसी भी तुलनीय प्रकार पर काम करते हैं। टेक्स्ट कॉलम पर ये वर्णानुक्रम में पहले और आखिरी मान लौटाते हैं, और दिनांक कॉलम पर सबसे शुरुआती और सबसे नवीनतम तिथियां लौटाते हैं।

जी हां। टेक्स्ट-टू-एसक्यूएल सहायक "प्रति सदस्य औसत भुगतान" जैसे प्रश्नों को ग्रुप-बाय क्वेरी में अनुवादित करते हैं। उत्पन्न एसक्यूएल को चलाएं। MySQL कार्यक्षेत्र और संख्याओं पर भरोसा करने से पहले पंक्तियों की संख्या की जांच कर लें।

इसका सामान्य कारण NULL हैंडलिंग और डुप्लिकेट जॉइन पंक्तियाँ हैं। एक AI मॉडल COUNT(*) का उपयोग कर सकता है जहाँ COUNT(column) की आवश्यकता होती है, या किसी टेबल को दो बार जॉइन कर सकता है, जिससे प्रत्येक SUM का मान बढ़ जाता है। हमेशा किसी ज्ञात मान से इसकी पुष्टि करें।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: