एसक्यूएल क्लॉज "ग्रुप बाय 1" का क्या अर्थ है?


201

किसी ने मुझे एक एसक्यूएल क्वेरी भेजी थी जहाँ GROUP BYक्लॉज में कथन शामिल था GROUP BY 1:।

यह एक टाइपो सही होना चाहिए? किसी भी कॉलम को उपनाम नहीं दिया गया है 1. इसका क्या मतलब हो सकता है? क्या मुझे यह मान लेना सही है कि यह एक टाइपो होना चाहिए?


6
इसका टाइपो नहीं है, आपके परिणाम का पहला कॉलम है
लामक

9
ध्यान दें कि यह सिंटैक्स गैर-पोर्टेबल है। यह mysql के अलावा अन्य डेटाबेस पर अलग तरह से व्यवहार करेगा। उदाहरण के लिए, Oracle में, इसे एक स्थिरांक के रूप में माना जाता है।
रसेल रीड

2
@RussellReed हाँ। दुर्भाग्य से (चूंकि एक उपनाम का उपयोग करना कभी-कभी बहुत उपयोगी होता है) एएनसी एसक्यूएल कॉलम ऑर्डिनल द्वारा समूहीकरण की अनुमति नहीं देता है। कारण यह है कि समूह प्रक्षेपण से पहले होता है। लेकिन तब .. जब हमारे पास दसियों लाइनों के साथ अभिव्यक्ति के समूह हैं .. तो हम अंतिम वर्ग विवरण में दसियों लाइनों के उत्परिवर्तन के साथ समाप्त होते हैं ।
जावदबा

जवाबों:


230

इसका मतलब यह है कि इसे क्या कहा जाता है, इसके बावजूद पहले कॉलम के आधार पर समूह बनाना। आप उसी के साथ कर सकते हैंORDER BY


74
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

उपरोक्त क्वेरी में GROUP BY 1संदर्भित है कि first column in select statementकौन है account_id

आप भी निर्दिष्ट कर सकते हैं ORDER BY

नोट: ORDER BY और GROUP BY की संख्या हमेशा 1 के साथ शुरू होती है 0 के साथ नहीं।


25

फ़ील्ड नाम द्वारा समूहीकरण के अलावा, आप तालिका के भीतर क्रमिक, या फ़ील्ड की स्थिति के अनुसार भी समूह बना सकते हैं। 1 पहले क्षेत्र से मेल खाता है (नाम की परवाह किए बिना), 2 दूसरा है, और इसी तरह।

यदि टेबल / दृश्य संरचना में बदलाव हो सकता है, तो यह आम तौर पर सलाह दी जाती है कि आप कुछ विशिष्ट पर समूह बना रहे हैं। इसके अतिरिक्त, यह जल्दी से समझना मुश्किल हो सकता है कि आपकी SQL क्वेरी क्या कर रही है यदि आपने तालिका फ़ील्ड को याद नहीं किया है।

यदि आप एक अद्वितीय सेट लौटा रहे हैं, या जल्दी से अस्थायी लुकअप कर रहे हैं, तो टाइपिंग को कम करने के लिए यह अच्छा शॉर्टहैंड सिंटैक्स है। यदि आप किसी बिंदु पर फिर से क्वेरी को चलाने की योजना बनाते हैं, तो मैं भविष्य में भ्रम और अप्रत्याशित जटिलताओं (योजना में बदलाव के कारण) से बचने के लिए उन्हें बदलने की सलाह दूंगा।


10
+1 के लिए "ऐसा मत करो" और मैं इससे बचने का सबसे अच्छा कारण यह कहूंगा कि यह पठनीय नहीं है।
युक


5

इसका मतलब है कि अपने चयनित क्लॉज में 1 कॉलम द्वारा sql समूह, हम हमेशा इसके GROUP BY 1साथ मिलकर उपयोग करते हैं ORDER BY 1, इसके अलावा आप इस तरह का भी उपयोग कर सकते हैं GROUP BY 1,2,3.., निश्चित रूप से यह हमारे लिए सुविधाजनक है, लेकिन आपको उस स्थिति पर ध्यान देने की आवश्यकता है परिणाम हो सकता है कि आप क्या नहीं हैं चाहते हैं कि किसी ने आपके चुनिंदा कॉलम को संशोधित किया है, और यह कल्पना नहीं है


4

यह समूह स्थिति के आधार पर समूह द्वारा आपके द्वारा समूह के बाद रखा जाएगा।

उदाहरण के लिए यदि आप ' SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' चलाते हैं तो यह समूह द्वारा होगा SALESMAN_NAME

ऐसा करने पर एक जोखिम यह है कि यदि आप ' Select *' चलाते हैं और किसी कारण से आप एक अलग क्रम पर कॉलम के साथ तालिका को फिर से बनाते हैं, तो यह आपको एक अलग परिणाम देगा जो आप अपेक्षा करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.