कुछ लोग अपने प्रश्नों में ग्रुप बाय और हैविंग क्लॉज से बचने के लिए बहुत अधिक प्रयास करते हैं। त्रुटि संदेश उधम मचाते हैं लेकिन वे आमतौर पर सही होते हैं। अच्छी SQL रिपोर्टिंग के लिए GROUP BY और HAVING प्रमुख शब्द आवश्यक हैं।
GROUP BY का प्राथमिक कारण पंक्तियों की संख्या को कम करना है, आमतौर पर एकत्रीकरण द्वारा। यह इनपुट से प्रत्येक मिलान समूह के लिए केवल एक पंक्ति उत्पन्न करता है। यह आपको साधारण SQL के माध्यम से परिष्कृत गणना करने की अनुमति देता है।
फलों का उदाहरण:
हमारे पास कुछ फल हैं:
यह अगला मामला हमें आगे देखने की अनुमति देता है। मध्य वर्ष, कौन से फल उपलब्ध होंगे? हम इसे ऊपर की तरह ही क्वेरी के साथ करते हैं, हालांकि, क्वेरी चलने के बाद हम होने वाले क्लॉज का उपयोग करके min(fresh_until) के मानों की जांच करते हैं। होने से आप एक समग्र योग्यता प्राप्त करते हैं।
सभी सेब और अंगूर साल के मध्य में उपलब्ध होंगे।
SELECT और FROM के बीच की वस्तुओं की सूची, लक्ष्य सूची। गैर-समुच्चय और समुच्चय शामिल हो सकते हैं। लक्ष्य सूची में वे गैर-समेकित स्तंभ
समूह के अनुसार समूह में होने चाहिए। त्रुटि संदेश ऐसा कहता है। खंड द्वारा समूह में स्तंभों का क्रम मायने रखता है। यह निर्धारित करता है कि समुच्चय को कैसे समूहीकृत किया जाता है। आदेश अक्सर पदानुक्रमित होता है। आपके कॉलम के लिए इसका मतलब आपका फोकस है। यह फल, या स्रोत और/या ताज़ा_आज तक हो सकता है।
ताश खेलने के उदाहरण
आइए उदाहरणों के एक और सेट को देखें जो ताश खेलने पर जानकारी निकालने का वर्णन करता है। आप विकिपीडिया मानक कार्ड पर कार्ड के बारे में जान सकते हैं।
मान लीजिए कि आप प्रोग्रामेटिक रूप से छह 5-कार्ड हाथों का सौदा करते हैं, जैसे छह लोग पोकर खेल रहे हैं। इस डील में कुल 30 कार्ड्स का इस्तेमाल किया गया है। वे एक हाथ . में हैं निम्न की तरह तालिका जहां लुकअप टेबल द्वारा कार्ड और सूट के नाम जोड़े जाते हैं। हम रैंक स्टोर करते हैं ताकि हम ठीक से सॉर्ट कर सकें। हम प्रदर्शन के लिए नामों का उपयोग करते हैं। नाम और रैंक का प्रत्येक कार्ड और सूट के लिए एक से एक संबंध है।
प्रत्येक हाथ के लिए सूट की गिनती क्या है? हम वास्तव में केवल उन हाथों की परवाह करते हैं जिनके पास एक ही सूट के 3 या अधिक कार्ड हैं। यह हमें बताएगा कि पोकर फ्लश के लिए किसके पास बेहतर मौके हैं। ध्यान दें कि हालांकि GROUP BY का अर्थ ORDER BY है, ऐसा नहीं है। ORDER BY स्पष्ट होना चाहिए।
तो क्या हुआ अगर आपने अपनी क्वेरी को गलत तरीके से समूहित किया? अगर यह हाथ टेबल हैंडीड द्वारा समूहीकृत नहीं है, तो आपको 5-कार्ड के 6 हाथों के 30 रिकॉर्ड मिलेंगे। यदि आपके पास समुच्चय थे, तो उन्हें पंक्ति के अनुसार समूहीकृत किया जाएगा। बहुत मददगार नहीं है।
यदि आप कार्ड का नाम जोड़ते हैं और लक्ष्य सूची में
कार्ड नाम एकल शामिल नहीं करते हैं और कार्ड के नाम से ऑर्डर करने का प्रयास करते हैं,
आपको त्रुटि संदेश प्राप्त होगा कि यह इसमें नहीं होना चाहिए
खंड द्वारा आदेश। खंड द्वारा क्रम में शामिल होना चाहिए
समूह के तत्व खंड द्वारा।
हालांकि, यदि कार्ड का नाम स्पष्ट रूप से लक्ष्य सूची में है,
तो कार्ड का नाम क्लॉज द्वारा ग्रुप में होना चाहिए और
इसलिए क्लॉज द्वारा ऑर्डर पर स्वीकार्य है।
यदि प्रश्न सूट द्वारा है, तो छह हाथों में से प्रत्येक के लिए प्रति सूट न्यूनतम 1 या अधिकतम 4 रिकॉर्ड होंगे। ध्यान दें कि हम सूट रैंक के आधार पर छाँट रहे हैं जो
समूह द्वारा क्लॉज में भी होना चाहिए। su_name और su_rank का एक से एक संबंध है।
हाथों में कार्ड का वितरण देखने के लिए, हमें कार्ड रैंक कॉलम के आधार पर समूह बनाना होगा। बेशक प्रत्येक कार्ड के 4 सूट होते हैं, इसलिए आपको चार से अधिक हाथों में कार्ड नहीं दिखाई देगा।
यह देखने और देखने के लिए कि इक्के किसके हाथ में है, हम निम्नलिखित छोटी क्वेरी का उपयोग कर सकते हैं। ध्यान दें कि एक WHERE क्लॉज है जिसे पंक्तियों को इकट्ठा करते समय निष्पादित किया जाता है। पंक्तियों को एकत्रित करने के बाद HAVING निष्पादित किया जाता है।
सारांश
ये उदाहरण ज्ञात संस्थाओं का मूल्यांकन करने के सरल तरीके हैं। प्रयोग करें और इन सरल नियमों का प्रयोग करें।
- यदि कोई स्तंभ लक्ष्य सूची में है और समग्र नहीं है, तो वह समूह द्वारा खंड में होना चाहिए।
- चयन प्रक्रिया के दौरान क्लॉज कहां होते हैं।
- समुच्चय पूर्ण होने के बाद खंड होते हैं।
- केवल गैर-समुच्चय ORDER BY खंड में हो सकते हैं।
- ग्रुप बाय क्लॉज का क्रम मायने रखता है।