4.1 ग्रुपिंग कॉलम
यह भी बहुत महत्वपूर्ण है कि यदि आप अभिलेखों को समूहीकृत करते हैं, तो अनुभाग में SELECT
आप केवल उन स्तंभों को निर्दिष्ट कर सकते हैं जिनके द्वारा डेटा को समूहीकृत किया गया है।
आपनही सकताएक प्रकार की क्वेरी लिखें और अनुभाग में नामSELECT
कॉलम निर्दिष्ट करें :
SELECT brand, name
FROM product
GROUP BY brand
आपके पास उत्पाद तालिका में नाम फ़ील्ड के साथ पंक्तियों का एक गुच्छा है , और यह स्पष्ट नहीं है कि आपको किस पंक्ति को यहाँ प्रतिस्थापित करने की आवश्यकता है। दोबारा सोचें: आप प्रत्येक ब्रांड के उत्पादों की संख्या जानना चाहते हैं और परिणामी तालिका को उत्पाद का नाम कैसे मिल सकता है?
यदि आप ऑपरेटर का उपयोग करते हैं GROUP BY
, तो सामान्य पंक्तियाँ आपके परिणाम में नहीं आ सकतीं, लेकिन केवल वे कॉलम जिनके द्वारा डेटा को समूहीकृत किया जाता है और "गणना किए गए कॉलम", जैसेCOUNT(*)
4.2 परिकलित स्तंभों द्वारा समूहीकरण
लेकिन आप कई कॉलम और यहां तक कि परिकलित कॉलम के आधार पर समूह बना सकते हैं। उदाहरण:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
और इस प्रश्न का परिणाम:
किराया_वर्ष | कुल |
---|---|
2012 | 1 |
2013 | 1 |
2014 | 1 |
2015 | 2 |
2018 | 1 |
आइए हमारे अनुरोध का विश्लेषण करें।
कर्मचारी तालिका में , प्रत्येक कर्मचारी की एक अद्वितीय किराया तिथि होती है, इसलिए इसके द्वारा समूहबद्ध डेटा काम नहीं करेगा - प्रत्येक तिथि के लिए एक रिकॉर्ड होगा और समूहीकरण का कोई मतलब नहीं होगा। लेकिन अगर हम काम पर रखने की तारीख से काम पर रखने के वर्ष की ओर बढ़ते हैं, तो यह एक ऐसी स्थिति हो सकती है जहां कंपनी ने एक ही वर्ष में कई कर्मचारियों को काम पर रखा हो।
आइए फिर से देखते हैं कि समूहबद्ध करने से पहले यह तालिका कैसी दिखेगी:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
और इस प्रश्न का परिणाम:
पहचान | नाम | किराया_वर्ष | शामिल होने की तारीख |
---|---|---|---|
1 | इवानोव इवान | 2012 | 2012-06-30 |
2 | पेट्रोव पेट्र | 2013 | 2013-08-12 |
3 | इवानोव सर्गेई | 2014 | 2014-01-01 |
4 | राबिनोविच मोइशा | 2015 | 2015-05-12 |
5 | किरिंको अनास्तासिया | 2015 | 2015-10-10 |
6 | वास्का | 2018 | 2018-11-11 |
लेकिन इस परिणामी तालिका को किराया_वर्ष द्वारा समूहीकृत किया जा सकता है और यह पता लगाया जा सकता है कि किसी विशेष वर्ष में कितने लोगों को काम पर रखा गया था।
4.3 एकाधिक स्तंभों द्वारा समूहीकरण
अब आइए यह पता लगाने की कोशिश करें कि हमने प्रत्येक वर्ष के प्रत्येक महीने में कितने कर्मचारियों को काम पर रखा है। ऐसा करने के लिए, हमें एक नहीं, बल्कि दो परिकलित फ़ील्ड को क्वेरी में एक साथ जोड़ने की आवश्यकता है - भाड़े का वर्ष (किराया_वर्ष) और भाड़े का महीना (किराया_महीना)।
आइए इस तरह से एक प्रश्न लिखें:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
और इस प्रश्न का परिणाम:
पहचान | नाम | किराया_वर्ष | किराया_माह | शामिल होने की तारीख |
---|---|---|---|---|
1 | इवानोव इवान | 2012 | 6 | 2012-06-30 |
2 | पेट्रोव पेट्र | 2013 | 8 | 2013-08-12 |
3 | इवानोव सर्गेई | 2014 | 1 | 2014-01-01 |
4 | राबिनोविच मोइशा | 2015 | 5 | 2015-05-12 |
5 | किरिंको अनास्तासिया | 2015 | 10 | 2015-10-10 |
6 | वास्का | 2018 | ग्यारह | 2018-11-11 |
यदि हम इस परिणाम तालिका में डेटा को महीने के अनुसार समूहित करते हैं, तो हम बस लोगों को समूहों में समूहित करते हैं, भले ही उन्हें किस वर्ष काम पर रखा गया हो। और हमें परिणामी तालिका में तीन कॉलम रखने की आवश्यकता है: वर्ष, महीना और काम पर रखे गए कर्मचारियों की संख्या।
ऐसा करने के लिए, ऑपरेटर के बाद, GROUP BY
आपको एक कॉलम नहीं, बल्कि दो के नाम का उपयोग करने की आवश्यकता है। उदाहरण:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
और इस प्रश्न का परिणाम:
किराया_वर्ष | किराया_माह | कुल |
---|---|---|
2012 | 6 | 1 |
2013 | 8 | 1 |
2014 | 1 | 1 |
2015 | 5 | 1 |
2015 | 10 | 1 |
2018 | ग्यारह | 1 |
तालिका में हमारे पास कुछ रिकॉर्ड हैं, इसलिए कुल कॉलम में हर जगह इकाइयां हैं। और वैसे, ध्यान दें कि जितने अधिक कॉलम हम समूहबद्ध करते हैं, परिणाम में उतनी ही अधिक पंक्तियाँ होती हैं।
GO TO FULL VERSION