Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL AVG () शुरुआती के लिए

SQL में, AVG() फ़ंक्शन एक समग्र फ़ंक्शन है जो किसी दिए गए व्यंजक में सभी मानों का औसत देता है।

इसका उपयोग व्यंजक में सभी विशिष्ट (अद्वितीय) मानों का औसत लौटाने के लिए भी किया जा सकता है।

व्यंजक संख्यात्मक होना चाहिए (यह वर्ण स्ट्रिंग, बिट स्ट्रिंग या डेटाटाइम नहीं हो सकता)।

यह कैसे काम करता है, यह दिखाने के लिए नीचे कुछ बुनियादी उदाहरण दिए गए हैं।

नमूना तालिका

मान लीजिए हमारे पास निम्न तालिका है:

SELECT * FROM Products;

परिणाम:

+-------------+------------+---------------------------------+----------------+-----------------------------------------+
| ProductId   | VendorId   | ProductName                     | ProductPrice   | ProductDescription                      |
|-------------+------------+---------------------------------+----------------+-----------------------------------------|
| 1           | 1001       | Left handed screwdriver         | 25.99          | Purple. Includes left handed carry box. |
| 2           | 1001       | Long Weight (blue)              | 14.75          | Includes a long wait.                   |
| 3           | 1001       | Long Weight (green)             | 11.99          | Approximate 30 minute waiting period.   |
| 4           | 1002       | Sledge Hammer                   | 33.49          | Wooden handle. Free wine glasses.       |
| 5           | 1003       | Chainsaw                        | 245.00         | Orange. Includes spare fingers.         |
| 6           | 1003       | Straw Dog Box                   | NULL           | Tied with vines. Very chewable.         |
| 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
| 8           | 1001       | Right handed screwdriver        | 25.99          | Blue. Includes right handed carry box.  |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

उदाहरण

सभी कीमतों का औसत प्राप्त करने के लिए हम निम्न क्वेरी का उपयोग कर सकते हैं।

SELECT AVG(ProductPrice)
FROM Products;

परिणाम:

+--------------------+
| (No column name)   |
|--------------------|
| 52.457142          |
+--------------------+

इस मामले में, कीमत की जानकारी ProductPrice . में स्टोर की जाती है कॉलम, और इसलिए हम इसे AVG() . के तर्क के रूप में पास करते हैं फ़ंक्शन, जो तब औसत की गणना करता है और परिणाम देता है।

कॉलम उपनामों का उपयोग करना

आप देखेंगे कि पिछले परिणामों में कॉलम नाम शामिल नहीं है। यह अपेक्षित है, क्योंकि AVG() फ़ंक्शन कोई कॉलम नहीं लौटाता है। आप एक उपनाम निर्दिष्ट करके आसानी से एक कॉलम नाम प्रदान कर सकते हैं।

SELECT AVG(ProductPrice) AS Average
FROM Products;

परिणाम:

+-----------+
| Average   |
|-----------|
| 52.457142 |
+-----------+

फ़िल्टर किए गए परिणाम

AVG() फ़ंक्शन क्वेरी द्वारा लौटाई गई पंक्तियों पर काम करता है। इसलिए यदि आप परिणामों को फ़िल्टर करते हैं, तो AVG() . का परिणाम प्रतिबिंबित करेंगे।

SELECT AVG(ProductPrice) AS Average
FROM Products
WHERE VendorId = 1001;

परिणाम:

+-----------+
| Average   |
|-----------|
| 19.680000 |
+-----------+

इस मामले में, निर्दिष्ट विक्रेता द्वारा पेश किए गए सभी उत्पादों का औसत मूल्य 19.680000 है।

NULL मान

AVG() फ़ंक्शन किसी भी NULL को अनदेखा करता है मूल्य। ऊपर हमारी नमूना तालिका में, उत्पाद संख्या 6 मिल गया है NULL इसके ProductPrice . में कॉलम, लेकिन हमारे AVG() . में इसे नज़रअंदाज़ कर दिया गया था उदाहरण।

आपके DBMS और आपकी सेटिंग्स के आधार पर, आपको यह चेतावनी दिखाई दे भी सकती है और नहीं भी, कि NULL परिणाम सेट में मान हटा दिए गए थे।

आप जो देख सकते हैं उसका एक उदाहरण यहां दिया गया है:

SELECT AVG(ProductPrice) AS Average
FROM Products;

परिणाम:

+-----------+
| Average   |
|-----------|
| 52.457142 |
+-----------+
Warning: Null value is eliminated by an aggregate or other SET operation.

यह सब हमें बताता है कि कॉलम में कम से कम एक NULL है मूल्य, और यह कि परिणामों की गणना करते समय इसे अनदेखा कर दिया गया था।

दिनांक/समय डेटा

AVG() फ़ंक्शन दिनांक/समय के भाव स्वीकार नहीं करता है।

मान लीजिए हमारे पास निम्न तालिका है:

SELECT PetName, DOB 
FROM Pets;

परिणाम:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
| Bark      | NULL       |
| Meow      | NULL       |
+-----------+------------+

अगर हम AVG() . का उपयोग करने का प्रयास करते हैं DOB . पर कॉलम, हमें एक त्रुटि मिलेगी।

SELECT AVG(DOB) AS Average
FROM Pets;

परिणाम:

Msg 8117, Level 16, State 1, Line 1
Operand data type date is invalid for avg operator.

चरित्र डेटा

AVG() फ़ंक्शन वर्ण स्ट्रिंग अभिव्यक्तियों को भी स्वीकार नहीं करता है।

यदि हम AVG() . का उपयोग करने का प्रयास करते हैं तो यहां क्या होता है ProductName . पर हमारे Products . का कॉलम तालिका (जो डेटा प्रकार के varchar का उपयोग करती है):

SELECT AVG(ProductName) AS Average
FROM Products;

परिणाम:

Msg 8117, Level 16, State 1, Line 1
Operand data type varchar is invalid for avg operator.

DISTINCT कीवर्ड

आप DISTINCT . का उपयोग कर सकते हैं AVG() with के साथ कीवर्ड केवल अलग-अलग मानों की गणना करने के लिए। अर्थात्, यदि कोई डुप्लिकेट मान हैं, तो उन्हें एक मान के रूप में माना जाता है।

उदाहरण:

SELECT AVG(DISTINCT ProductPrice) AS DistinctAverage
FROM Products;

परिणाम:

+-------------------+
| DistinctAverage   |
|-------------------|
| 56.868333         |
+-------------------+

हम देख सकते हैं कि यह परिणाम DISTINCT . के बिना हमें मिले परिणाम से अधिक है कीवर्ड।

संक्षेप में, हमें बिना DISTINCT . के 52.457142 मिले कीवर्ड, और 56.868333 DISTINCT . के साथ कीवर्ड।

ऐसा इसलिए है क्योंकि दो आइटम समान कीमत साझा करते हैं (बाएं हाथ के स्क्रूड्राइवर और दाएं हाथ के स्क्रूड्राइवर दोनों की कीमत 25.99 है)। इसलिए, AVG() फ़ंक्शन, जब DISTINCT . के साथ प्रयोग किया जाता है कीवर्ड, उन दोनों मानों को एक मानता है, और उसके अनुसार उसके परिणाम की गणना करता है।

विंडो फ़ंक्शंस

आपके DBMS के आधार पर, आप OVER . का उपयोग करने में सक्षम हो सकते हैं अपने AVG() . के साथ क्लॉज विंडो फ़ंक्शन बनाने के लिए फ़ंक्शन।

एक विंडो फ़ंक्शन क्वेरी पंक्तियों के एक सेट पर एक समग्र-जैसा ऑपरेशन करता है। यह प्रत्येक क्वेरी पंक्ति के लिए परिणाम उत्पन्न करता है। यह एक समग्र ऑपरेशन के विपरीत है, जो क्वेरी पंक्तियों को एक परिणाम पंक्ति में समूहित करता है।

अवधारणा को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।

हम पहले ही Products देख चुके हैं टेबल। हमारे डेटाबेस में एक Customers भी है तालिका, और इसमें निम्न डेटा शामिल है:

+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| CustomerId   | CustomerName         | PostalAddress     | City       | StateProvince   | ZipCode    | Country   | Phone          |
|--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| 1001         | Palm Pantry          | 20 Esplanade      | Townsville | QLD             | 2040       | AUS       | (308) 555-0100 |
| 1002         | Tall Poppy           | 12 Main Road      | Columbus   | OH              | 43333      | USA       | (310) 657-0134 |
| 1003         | Crazy Critters       | 10 Infinite Loops | Cairns     | QLD             | 4870       | AUS       | (418) 555-0143 |
| 1004         | Oops Media           | 4 Beachside Drive | Perth      | WA              | 1234       | AUS       | (405) 443-5987 |
| 1005         | Strange Names Inc.   | 789 George Street | Sydney     | NSW             | 2000       | AUD       | (318) 777-0177 |
| 1006         | Hi-Five Solutionists | 5 High Street     | Highlands  | HI              | 1254       | AUS       | (415) 413-5182 |
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+

हम इन तालिकाओं से डेटा पुनर्प्राप्त कर सकते हैं और उन्हें एक परिणाम सेट के रूप में शामिल होने का उपयोग करके प्रस्तुत कर सकते हैं।

हम AVG() . का भी उपयोग कर सकते हैं OVER . के साथ कार्य करें डेटा पर विंडो फ़ंक्शन लागू करने के लिए क्लॉज।

SELECT 
    v.VendorName,
    p.ProductName,
    p.ProductPrice,
    AVG(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Average For This Vendor"
FROM Products p 
INNER JOIN Vendors v 
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Average For This Vendor";

परिणाम:

+---------------+---------------------------------+----------------+---------------------------+
| VendorName    | ProductName                     | ProductPrice   | Average For This Vendor   |
|---------------+---------------------------------+----------------+---------------------------|
| Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99           | 9.990000                  |
| Mars Supplies | Long Weight (green)             | 11.99          | 19.680000                 |
| Mars Supplies | Long Weight (blue)              | 14.75          | 19.680000                 |
| Mars Supplies | Right handed screwdriver        | 25.99          | 19.680000                 |
| Mars Supplies | Left handed screwdriver         | 25.99          | 19.680000                 |
| Pedal Medals  | Straw Dog Box                   | NULL           | 245.000000                |
| Pedal Medals  | Chainsaw                        | 245.00         | 245.000000                |
| Randy Roofers | Sledge Hammer                   | 33.49          | 33.490000                 |
+---------------+---------------------------------+----------------+---------------------------+

इस मामले में हमने OVER . का इस्तेमाल किया हमारे AVG() . के साथ क्लॉज विक्रेता के नाम से परिणाम को विभाजित करने का कार्य।

ऐसा करने से, हम प्रत्येक उत्पाद के लिए मूल्य की जानकारी, साथ ही उस विक्रेता से सभी उत्पादों की औसत कीमत वापस करने में सक्षम थे। विक्रेता के बदलते ही औसत मूल्य बदल जाता है (जब तक कि कई विक्रेताओं का औसत समान न हो), लेकिन एक ही विक्रेता के सभी उत्पादों के लिए समान रहता है।

इस अवधारणा को SQL में अन्य समग्र कार्यों पर भी लागू किया जा सकता है, जैसे SUM() , MIN() , MAX() , और COUNT()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पहचान कॉलम को चौड़ा करने के प्रभाव को कम करना - भाग 2

  2. पैरामीटर सूँघने वाला प्राइमर

  3. डेटा मॉडलर की आंखों से छुट्टियां देखना

  4. SQL में विदेशी कुंजी कैसे जोड़ें?

  5. हेकाटन नमूनों के साथ कुछ छोटे मुद्दे