sql में GROUP BY और ORDER BY के बीच क्या अंतर है


119

आप सामान्य रूप से कब उपयोग करते हैं? उदाहरणों को बहुत प्रोत्साहित किया जाता है!

मैं MySql का उल्लेख कर रहा हूं, लेकिन दूसरे DBMS पर अवधारणा के अलग होने की कल्पना नहीं कर सकता

जवाबों:


79

आदेश द्वारा आइटम को वापस कर दिया जाता है जिसमें आदेश बदल देता है।

ग्रुप BY निर्दिष्ट स्तंभों द्वारा रिकॉर्ड एकत्र करेगा, जो आपको गैर-समूहित कॉलम (जैसे SUM, COUNT, AVG, आदि) पर एकत्रीकरण कार्य करने की अनुमति देता है।


130
यह कथन वस्तुतः बिना किसी उदाहरण के समझ में आता है।
जॉनमेरलिनो

2
मुझे लगता है कि कड़ी में पृष्ठ पर दूसरे उदाहरण के अंतर को समझने के लिए पर्याप्त है tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002

क्या आप एक उदाहरण प्रदान कर सकते हैं?
चावल

249

आदेश द्वारा आइटम को वापस कर दिया जाता है जिसमें आदेश बदल देता है।

ग्रुप BY निर्दिष्ट स्तंभों द्वारा रिकॉर्ड एकत्र करेगा, जो आपको गैर-समूहित कॉलम (जैसे SUM, COUNT, AVG, आदि) पर एकत्रीकरण कार्य करने की अनुमति देता है।

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter

2
क्या होगा अगर टेबल में ageकॉलम है, जिसमें पीटर्स अलग-अलग उम्र के हैं और क्वेरी सेलेक्ट नेम, एजी फ्रॉम टिल ग्रुप बाय नेम?
वरुण

1
आप उन कॉलमों को वापस नहीं कर सकते जो आपके समूह में नहीं हैं, या एक विधि नहीं है। इसलिए आपको या तो समूह में उम्र जोड़ना होगा, या मैक्स (आयु) जैसा कुछ करना होगा।
रिडलरडेव

78

आदेश द्वारा: आरोही या अवरोही क्रम में डेटा को सॉर्ट करें।

ग्राहक तालिका पर विचार करें :

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

निम्नलिखित एक उदाहरण है, जो NAME द्वारा बढ़ते क्रम में परिणाम को क्रमबद्ध करेगा:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

यह निम्नलिखित परिणाम उत्पन्न करेगा:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

ग्रुप बाय: समूहों में समान डेटा की व्यवस्था करें।

अब, ग्राहक तालिका में डुप्लिकेट नामों के साथ निम्नलिखित रिकॉर्ड हैं:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

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

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

यह निम्नलिखित परिणाम देगा: (समान नामों के लिए यह अंतिम एक को उठाएगा और अंत में आरोही क्रम में कॉलम को छाँटेगा)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

जैसा कि आपने अनुमान लगाया है कि यह एसक्यूएल फ़ंक्शन जैसे योग, एवीजी आदि के बिना किसी काम का नहीं है।

इसलिए ग्रुप बाय के उचित उपयोग को समझने के लिए इस परिभाषा को देखें:

एक समूह द्वारा खंड एक एकल / अलग समूह में समान पंक्तियों को सारांशित करके एक क्वेरी द्वारा लौटाए गए पंक्तियों पर काम करता है और प्रत्येक समूह के लिए सारांश के साथ एक एकल पंक्ति का चयन करता है, जैसे कि COECT (), सुमेत सूची में उपयुक्त एग्रिगेट फ़ंक्शन का उपयोग करके। (), MIN (), MAX (), AVG (), आदि।

अब, यदि आप प्रत्येक ग्राहक (नाम) पर वेतन की कुल राशि जानना चाहते हैं, तो ग्रुप बाय क्वेरी निम्नानुसार होगी:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

यह निम्नलिखित परिणाम देगा: समान नामों के वेतन का योग (समान नाम हटाने के बाद NAME कॉलम को सॉर्ट करना)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

25

अंतर बिल्कुल वही है जो नाम का अर्थ है: एक समूह एक समूह संचालन करता है, और क्रम से एक आदेश।

यदि आप करते हैं SELECT * FROM Customers ORDER BY Nameतो आपको ग्राहकों के नाम के अनुसार परिणाम सूची मिलती है।

यदि आप SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActiveसक्रिय और निष्क्रिय ग्राहकों की गिनती प्राप्त करते हैं समूह ने आपके द्वारा निर्दिष्ट फ़ील्ड के आधार पर परिणामों को एकत्र किया।


3
इसके अलावा: यदि आप ग्रुप बनाते हैं, तो परिणाम जरूरी नहीं हैं; हालाँकि कई मामलों में वे सहज क्रम में सामने आ सकते हैं, लेकिन यह कि समूह खंड द्वारा गारंटी नहीं दी जाती है। यदि आप अपने समूहों को क्रमबद्ध करना चाहते हैं, तो हमेशा ग्रुप BY के बाद एक अन्वेषण ORDER BY का उपयोग करें।
डेव कोस्टा

16

वे पूरी तरह से अलग अर्थ रखते हैं और वास्तव में बिल्कुल संबंधित नहीं हैं।

ORDER BY आपको विभिन्न मानदंडों के अनुसार सेट किए गए परिणाम को क्रमबद्ध करने की अनुमति देता है, जैसे कि पहले नाम से az, फिर उच्चतम से सबसे कम कीमत के अनुसार क्रमबद्ध करें।

(आदेश नाम से, मूल्य DESC)

ग्रुप बीवाई आपको अपना परिणाम सेट करने की अनुमति देता है, इसे तार्किक समूहों में समूहित करें और फिर उन समूहों पर समग्र प्रश्नों को चलाएं। उदाहरण के लिए, आप सभी कर्मचारियों का चयन कर सकते हैं, उन्हें उनके कार्यस्थल के स्थान के अनुसार समूहित कर सकते हैं और प्रत्येक कार्यस्थल के सभी कर्मचारियों के औसत वेतन की गणना कर सकते हैं।


8

सरल, ORDER BYडेटा और GROUP BYसमूहों को आदेश देता है , या डेटा को जोड़ता है।

ORDER BY परिणाम के अनुसार निर्धारित क्षेत्र के अनुसार, क्रम से बढ़ते क्रम में।

मान लीजिए कि आप किसी क्वेरी को फायर कर रहे हैं ORDER BY (student_roll_number), तो यह आपको छात्र के रोल नंबर के आरोही क्रम में दिखाएगा। यहां, student_roll_numberप्रविष्टि एक से अधिक बार हो सकती है।

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


4

GROUP BY का उपयोग चयन में पंक्तियों को समूह में करने के लिए किया जाता है, आमतौर पर जब कुछ पंक्तियों के लिए एक ही मान वाले पंक्तियों के समूह के लिए पंक्तियों के समुच्चय (जैसे कि कुल योग, औसत आदि) की गणना करते हैं।

ORDER BY का उपयोग पंक्तियों को चुनने के लिए किया जाता है, जो एक चयनित विवरण से उत्पन्न होती हैं।


4

कुछ अच्छे उदाहरण हैं। बस अपने स्वयं के वेबचैटशीट से जोड़ना पसंद करता हूं जो अच्छे स्पष्ट उदाहरण देता है, साथ ही साथ आपको अपने स्वयं के एसक्यूएल को निष्पादित करने देता है।

SQL ऑर्डर द्वारा

SQL समूह द्वारा


1

ORDER BYएक क्षेत्र को आरोही या अवरोही क्रम में दिखाता है। जबकि GROUP BYकेवल एक आउटपुट में समान फ़ील्डनाम, आईडी आदि दिखाए जाते हैं।


4
यह उत्तर कोई अतिरिक्त जानकारी प्रदान नहीं करता है जो स्वीकार किए गए उत्तर, या दिए गए किसी अन्य उत्तर, पहले से ही राज्य नहीं करता है।
newfendoy

1
  1. GROUP BY निर्दिष्ट कॉलम द्वारा रिकॉर्ड एकत्र करेगा जो आपको गैर-समूहित कॉलम (जैसे SUM, COUNT, AVG, आदि) पर एकत्रीकरण कार्य करने की अनुमति देता है। आदेश द्वारा आइटम को वापस कर दिया जाता है जिसमें आदेश बदल देता है।
  2. यदि आप IsActive का चयन करते हैं, तो COUNT (*) ग्राहकों के समूह से IsActive से आपको सक्रिय और निष्क्रिय ग्राहकों की गिनती मिलती है। समूह ने आपके द्वारा निर्दिष्ट फ़ील्ड के आधार पर परिणामों को एकत्र किया। यदि आप नाम से ग्राहक का चयन * करते हैं तो आपको परिणाम सूची ग्राहक के नाम से क्रमबद्ध मिलती है।
  3. यदि आप ग्रुप बनाते हैं, तो परिणाम आवश्यक रूप से क्रमबद्ध नहीं होते हैं; हालाँकि कई मामलों में वे सहज क्रम में सामने आ सकते हैं, लेकिन यह कि समूह खंड द्वारा गारंटी नहीं दी जाती है। यदि आप चाहते हैं कि आपके समूह क्रमबद्ध हों, तो हमेशा ग्रुप BY के बाद स्पष्ट रूप से ORDER BY का उपयोग करें।
  4. समूहीकृत डेटा को जहां क्लॉज द्वारा फ़िल्टर नहीं किया जा सकता है। ऑर्डर डेटा को WHERE क्लॉज द्वारा फ़िल्टर किया जा सकता है।

0

यह ध्यान दिया जाना चाहिए कि GROUP BYहमेशा आवश्यक नहीं है (कम से कम PostgreSQL में, और अन्य एसक्यूएल वेरिएंट में संभावना है) आप ORDER BYएक सूची के साथ उपयोग कर सकते हैं और आप अभी भी उपयोग कर सकते हैं ASCया DESC प्रति कॉलम ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.