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

शुरुआती के लिए एसक्यूएल ग्रुप बाय क्लॉज

SQL में, GROUP BY क्लॉज का उपयोग क्वेरी के परिणामों को पंक्तियों के समूहों में विभाजित करने के लिए किया जा सकता है।

यह आमतौर पर प्रत्येक समूह पर एक या अधिक एकत्रीकरण करने के लिए किया जाता है।

उदाहरण 1

GROUP BY को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है खंड।

निम्न तालिका लें:

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                   | 55.99          | Tied with vines. Very chewable.         |
| 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

हम उस तालिका के विरुद्ध निम्न क्वेरी चला सकते हैं।

SELECT 
    VendorId,
    COUNT(VendorId) AS Count
FROM Products
GROUP BY VendorId;

परिणाम:

+------------+---------+
| VendorId   | Count   |
|------------+---------|
| 1001       | 3       |
| 1002       | 1       |
| 1003       | 2       |
| 1004       | 1       |
+------------+---------+

यहां, हम COUNT() . का उपयोग करते हैं प्रत्येक VendorId . के लिए पंक्तियों की संख्या लौटाने के लिए कुल कार्य , फिर GROUP BY परिणामों को समूहबद्ध करने के लिए खंड।

उदाहरण 2

इस उदाहरण में हम SUM() . का उपयोग करते हैं एक जिले के भीतर सभी शहरों की कुल आबादी को वापस करने के लिए कुल कार्य, फिर GROUP BY परिणामों को समूहबद्ध करने के लिए खंड।

कल्पना कीजिए कि हमारे पास City . नामक एक तालिका है जो शहर के नाम और उनकी आबादी के साथ-साथ उनके संबंधित देश कोड और जिलों (अपने अलग कॉलम में) को स्टोर करता है।

इस तरह:

SELECT * FROM city
WHERE CountryCode IN ('AGO', 'ARE', 'AUS');

परिणाम:

+------+---------------+---------------+-----------------+--------------+
| ID   | Name          | CountryCode   | District        | Population   |
|------+---------------+---------------+-----------------+--------------|
| 56   | Luanda        | AGO           | Luanda          | 2022000      |
| 57   | Huambo        | AGO           | Huambo          | 163100       |
| 58   | Lobito        | AGO           | Benguela        | 130000       |
| 59   | Benguela      | AGO           | Benguela        | 128300       |
| 60   | Namibe        | AGO           | Namibe          | 118200       |
| 64   | Dubai         | ARE           | Dubai           | 669181       |
| 65   | Abu Dhabi     | ARE           | Abu Dhabi       | 398695       |
| 66   | Sharja        | ARE           | Sharja          | 320095       |
| 67   | al-Ayn        | ARE           | Abu Dhabi       | 225970       |
| 68   | Ajman         | ARE           | Ajman           | 114395       |
| 130  | Sydney        | AUS           | New South Wales | 3276207      |
| 131  | Melbourne     | AUS           | Victoria        | 2865329      |
| 132  | Brisbane      | AUS           | Queensland      | 1291117      |
| 133  | Perth         | AUS           | West Australia  | 1096829      |
| 134  | Adelaide      | AUS           | South Australia | 978100       |
| 135  | Canberra      | AUS           | Capital Region  | 322723       |
| 136  | Gold Coast    | AUS           | Queensland      | 311932       |
| 137  | Newcastle     | AUS           | New South Wales | 270324       |
| 138  | Central Coast | AUS           | New South Wales | 227657       |
| 139  | Wollongong    | AUS           | New South Wales | 219761       |
| 140  | Hobart        | AUS           | Tasmania        | 126118       |
| 141  | Geelong       | AUS           | Victoria        | 125382       |
| 142  | Townsville    | AUS           | Queensland      | 109914       |
| 143  | Cairns        | AUS           | Queensland      | 92273        |
+------+---------------+---------------+-----------------+--------------+

मैंने परिणामों को केवल तीन देशों तक सीमित कर दिया, अन्यथा सूची रास्ते . होगी इस लेख के लिए बहुत लंबा है।

अब, मान लीजिए कि हम प्रत्येक जिले की जनसंख्या प्राप्त करना चाहते थे, और हम प्रत्येक जिले को उसकी जनसंख्या और देश कोड के साथ सूचीबद्ध करना चाहते थे।

हम यह कर सकते थे।

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
ORDER BY CountryCode;

परिणाम:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Benguela        | 258300       |
| AGO           | Huambo          | 163100       |
| AGO           | Luanda          | 2022000      |
| AGO           | Namibe          | 118200       |
| ARE           | Abu Dhabi       | 624665       |
| ARE           | Ajman           | 114395       |
| ARE           | Dubai           | 669181       |
| ARE           | Sharja          | 320095       |
| AUS           | Capital Region  | 322723       |
| AUS           | New South Wales | 3993949      |
| AUS           | Queensland      | 1805236      |
| AUS           | South Australia | 978100       |
| AUS           | Tasmania        | 126118       |
| AUS           | Victoria        | 2990711      |
| AUS           | West Australia  | 1096829      |
+---------------+-----------------+--------------+

हम देख सकते हैं कि हमारे परिणामों को निर्दिष्ट के अनुसार समूहीकृत किया गया है, और अब हमें प्रत्येक जिले के लिए पूरी आबादी मिलती है (अलग-अलग शहरों की आबादी के विपरीत, इस तरह वे अंतर्निहित तालिका में संग्रहीत होते हैं)।

ध्यान दें कि GROUP BY क्लॉज किसी भी WHERE . के बाद आना चाहिए खंड और किसी भी ORDER BY . से पहले खंड।

यदि हम जिले के बजाय प्रत्येक देश की जनसंख्या प्राप्त करना चाहते हैं, तो हमारी क्वेरी और भी अधिक कॉम्पैक्ट हो जाती है।

SELECT
    CountryCode,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode
ORDER BY CountryCode;

परिणाम:

+---------------+--------------+
| CountryCode   | Population   |
|---------------+--------------|
| AGO           | 2561600      |
| ARE           | 1728336      |
| AUS           | 11313666     |
+---------------+--------------+

ध्यान रखें कि यह विशेष नमूना डेटाबेस बहुत पुराना है, और इसकी जनसंख्या संख्या वर्तमान वास्तविकता को नहीं दर्शाती है।

उदाहरण 3 - हैविंग क्लॉज

आप HAVING . शामिल कर सकते हैं आपके GROUP BY . के साथ क्लॉज समूहों को फ़िल्टर करने के लिए खंड।

उदाहरण:

SELECT
    CountryCode,
    District,
    SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) > 1000000
ORDER BY CountryCode;

परिणाम:

+---------------+-----------------+--------------+
| CountryCode   | District        | Population   |
|---------------+-----------------+--------------|
| AGO           | Luanda          | 2022000      |
| AUS           | New South Wales | 3993949      |
| AUS           | Queensland      | 1805236      |
| AUS           | Victoria        | 2990711      |
| AUS           | West Australia  | 1096829      |
+---------------+-----------------+--------------+

HAVING क्लॉज WHERE . के समान है खंड, सिवाय इसके कि WHERE अलग-अलग पंक्तियों को फ़िल्टर करता है, जबकि HAVING फ़िल्टर समूह।

साथ ही, WHERE क्लॉज डेटा को पहले फ़िल्टर करता है यह समूहीकृत है, जबकि HAVING बाद data डेटा फ़िल्टर करता है यह समूहीकृत है।

HAVING क्लॉज उन्हीं ऑपरेटरों को स्वीकार करता है जिनका उपयोग आप WHERE . के साथ कर सकते हैं खंड (जैसे = , ) Operator for Beginners">> , =) Operator for Beginners">>= , IN , LIKE , आदि)।


  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. घुटना टेककर प्रदर्शन समस्या निवारण से बचना

  5. डॉकर के साथ TimescaleDB को तैनात करने के लिए एक गाइड