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

एग्रीगेट फ़ंक्शन क्या होते हैं? MySQL?
An कुल कार्य यह फ़ंक्शन एक ही कॉलम की कई पंक्तियों को पढ़ता है और उन्हें एक मान में परिवर्तित कर देता है। एग्रीगेट फ़ंक्शन का मुख्य कार्य है:
- कई पंक्तियों पर गणना करना
- किसी तालिका के एक एकल स्तंभ का
- और एकल मान लौटाना.
आईएसओ मानक पाँच (5) समग्र कार्यों को परिभाषित करता है, अर्थात्:
- COUNT
- SUM
- AVG
- न्यूनतम
- मैक्स
इन पांचों पर एक ही नियम लागू होता है: एग्रीगेट फ़ंक्शन 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 वर्कबेंच से हमें निम्नलिखित परिणाम प्राप्त होते हैं।
क्वेरी WHERE क्लॉज़ में दो तालिकाओं को जोड़ती है — यह पुरानी कॉमा-जॉइन शैली है। आधुनिक कोड इसी लॉजिक को स्पष्ट रूप से लिखता है। आंतरिक जोड़ … चालूयह भी ध्यान दें कि SELECT सूची में प्रत्येक गैर-एकत्रित कॉलम GROUP BY में दिखाई देना चाहिए, या MySQL 5.7 और उसके बाद के संस्करण ONLY_FULL_GROUP_BY के अंतर्गत क्वेरी को अस्वीकार करते हैं। देखें सरकारी MySQL कुल फ़ंक्शन संदर्भ.


