खोज…


परिचय

GROUP BY स्टेटमेंट का उपयोग करके एक सेलेक्ट क्वेरी के परिणामों को एक या अधिक कॉलम द्वारा समूहीकृत किया जा सकता है: समूहीकृत कॉलम में समान मूल्य वाले सभी परिणाम एक साथ एकत्रित होते हैं। यह एक परिणाम के बजाय आंशिक परिणामों की एक तालिका बनाता है। समूह BY का उपयोग गैर-समूहीकृत कॉलमों को एकत्र करने के तरीके को परिभाषित करने के लिए HAVING कथन का उपयोग करके एकत्रीकरण कार्यों के साथ किया जा सकता है।

वाक्य - विन्यास

  • समूह द्वारा {
    स्तंभ अभिव्यक्ति
    | रोलअप (<group_by_expression> [, ... n])
    | CUBE (<group_by_expression> [, ... n])
    | समूह बनाना ([, ... n])
    | () - भव्य कुल को दर्शाता है
    } [, ... एन]

  • <group_by_expression> :: =
    स्तंभ अभिव्यक्ति
    | (कॉलम-एक्सप्रेशन [, ... n])

  • <समूहीकरण_सेट> :: =
    () - भव्य कुल को दर्शाता है
    | <Grouping_set_item>
    | (<grouping_set_item> [, ... n])

  • <Grouping_set_item> :: =
    <Group_by_expression>
    | रोलअप (<group_by_expression> [, ... n])
    | CUBE (<group_by_expression> [, ... n])

किसी दिए गए कॉलम में प्रत्येक अद्वितीय प्रविष्टि के लिए पंक्तियों की संख्या को गिनने के लिए उपयोग करें

मान लें कि आप किसी कॉलम में दिए गए मान के लिए गणना या उप-योग उत्पन्न करना चाहते हैं।

इस तालिका को देखते हुए, "वेस्टरोसियन":

नाम GreatHouseAllegience
आर्य निरा
Cercei Lannister
Myrcella Lannister
यारा Greyjoy
Catelyn निरा
Sansa निरा

ग्रुप बाय के बिना, COUNT बस कुल पंक्तियों को लौटाएगी:

SELECT Count(*) Number_of_Westerosians
FROM Westerosians

रिटर्न ...

Number_of_Westerosians
6

लेकिन ग्रुप BY को जोड़कर, हम उपयोगकर्ताओं को दिए गए कॉलम में प्रत्येक मूल्य के लिए, किसी दिए गए ग्रेट हाउस में लोगों की संख्या वापस करने के लिए, कह सकते हैं:

SELECT GreatHouseAllegience House, Count(*) Number_of_Westerosians
FROM Westerosians
GROUP BY GreatHouseAllegience

रिटर्न ...

मकान Number_of_Westerosians
निरा 3
Greyjoy 1
Lannister 2

सबसे बड़ी या छोटी श्रेणी के अनुसार परिणामों को क्रमबद्ध करने के लिए ORDER BY के साथ ग्रुप को जोड़ना आम बात है:

SELECT GreatHouseAllegience House, Count(*) Number_of_Westerosians
FROM Westerosians
GROUP BY GreatHouseAllegience
ORDER BY Number_of_Westerosians Desc

रिटर्न ...

मकान Number_of_Westerosians
निरा 3
Lannister 2
Greyjoy 1

फ़िल्टर ग्रुप BY एक हाइविंग क्लॉज का उपयोग करके परिणाम

HAVING क्लॉज, GROUP BY अभिव्यक्ति के परिणामों को फ़िल्टर करता है। नोट: निम्नलिखित उदाहरण लाइब्रेरी उदाहरण डेटाबेस का उपयोग कर रहे हैं।

उदाहरण:

सभी लेखकों को लौटाएं जिन्होंने एक से अधिक पुस्तक ( लाइव उदाहरण ) लिखी हैं।

SELECT
  a.Id,
  a.Name,
  COUNT(*) BooksWritten
FROM BooksAuthors ba
  INNER JOIN Authors a ON a.id = ba.authorid
GROUP BY
  a.Id,
  a.Name
HAVING COUNT(*) > 1    -- equals to HAVING BooksWritten > 1
;

उन सभी पुस्तकों को लौटाएं जिनमें तीन से अधिक लेखक हैं ( जीवंत उदाहरण )।

SELECT
  b.Id,
  b.Title,
  COUNT(*) NumberOfAuthors
FROM BooksAuthors ba
  INNER JOIN Books b ON b.id = ba.bookid
GROUP BY
  b.Id,
  b.Title
HAVING COUNT(*) > 3    -- equals to HAVING NumberOfAuthors > 3
;

मूल समूह उदाहरण के लिए

यदि आप स्पष्टीकरण के लिए "प्रत्येक के लिए" के रूप में ग्रुप बीई के बारे में सोचते हैं तो यह आसान हो सकता है। नीचे क्वेरी:

SELECT EmpID, SUM (MonthlySalary) 
FROM Employee
GROUP BY EmpID

कहना:

"मुझे प्रत्येक कर्मचारी के लिए मासिक वेतन का योग दें"

तो अगर आपकी तालिका इस तरह दिखती है:

+-----+-------------+
|EmpID|MonthlySalary|
+-----+-------------+
|1    |200          |
+-----+-------------+
|2    |300          |
+-----+-------------+

परिणाम:

+-+---+
|1|200|
+-+---+
|2|300|
+-+---+

कुछ भी करने के लिए योग दिखाई नहीं देगा क्योंकि एक नंबर का योग वह संख्या है। दूसरी ओर अगर यह इस तरह दिखता है:

+-----+-------------+
|EmpID|MonthlySalary|
+-----+-------------+
|1    |200          |
+-----+-------------+
|1    |300          |
+-----+-------------+
|2    |300          |
+-----+-------------+

परिणाम:

+-+---+
|1|500|
+-+---+
|2|300|
+-+---+

तब यह होता है क्योंकि एक साथ योग करने के लिए दो EmpID 1 हैं।

रोल एकत्रीकरण (डेटा खनन)

विवरण

SQL मानक दो अतिरिक्त कुल ऑपरेटर प्रदान करता है। ये सभी मानों के सेट को निरूपित करने के लिए पॉलीमॉर्फिक मान "ALL" का उपयोग करते हैं जो एक विशेषता ले सकता है। दो ऑपरेटर हैं:

  • with data cube कि यह क्लॉज के तर्क विशेषताओं की तुलना में सभी संभव संयोजन प्रदान करता है।
  • with roll up कि यह क्लाज के तर्क में सूचीबद्ध होने की तुलना में बाएं से दाएं की विशेषताओं पर विचार करके प्राप्त किए गए समुच्चय प्रदान करता है।

SQL मानक संस्करण जो इन सुविधाओं का समर्थन करते हैं: 1999,2003,2006,2008,2011।

उदाहरण

इस तालिका पर विचार करें:

खाना ब्रांड कुल रकम
पास्ता Brand1 100
पास्ता Brand2 250
पिज़्ज़ा Brand2 300

घन के साथ

select Food,Brand,Total_amount
from Table
group by Food,Brand,Total_amount with cube
खाना ब्रांड कुल रकम
पास्ता Brand1 100
पास्ता Brand2 250
पास्ता सब 350
पिज़्ज़ा Brand2 300
पिज़्ज़ा सब 300
सब Brand1 100
सब Brand2 550
सब सब 650

रोल के साथ

select Food,Brand,Total_amount
from Table
group by Food,Brand,Total_amount with roll up
खाना ब्रांड कुल रकम
पास्ता Brand1 100
पास्ता Brand2 250
पिज़्ज़ा Brand2 300
पास्ता सब 350
पिज़्ज़ा सब 300
सब सब 650


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow