2011-09-12 12 views
117

किसी ने मुझे एक SQL क्वेरी भेजी जहां GROUP BY खंड में बयान शामिल था: GROUP BY 1SQL खंड "ग्रुप बाय 1" का क्या अर्थ है?

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

+2

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

+5

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

+2

@RussellReed हां। दुर्भाग्यवश (चूंकि एक उपनाम का उपयोग कभी-कभी बहुत उपयोगी होता है) ansi sql कॉलम ordinal द्वारा समूहबद्ध करने की अनुमति नहीं देता है। कारण यह है कि समूह प्रक्षेपण से पहले होता है। लेकिन फिर .. जब हम लाइनों के दसियों के साथ अभिव्यक्तियों को समूहीकृत करते हैं .. हम अंतिम एसक्यूएल स्टेटमेंट में लाइनों के दसियों * के साथ समाप्त होते हैं। – javadba

उत्तर

128

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

32
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 में भी निर्दिष्ट कर सकते हैं।

Note : The number in ORDER BY and GROUP BY always start with 1 not with 0. 
17

क्षेत्र नाम से समूह के अलावा, आप भी समूह क्रमसूचक से हो सकता है, या स्थिति क्षेत्र है।

यदि आप कुछ विशिष्ट पर समूह कर रहे हैं, तो तालिका सामान्य रूप से अनदेखा है, क्योंकि तालिका/दृश्य संरचना बदल सकती है; इसके अतिरिक्त, इसे पढ़ने में अधिक मुश्किल है (क्रेडिट: Yuck)। हालांकि अगर आप किसी चीज़ का अनूठा सेट लौट रहे हैं, तो यह ठीक है।

+5

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

1

यह समूह द्वारा आपके द्वारा रखे गए कॉलम स्थिति से समूह होगा।

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

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

0

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

संबंधित मुद्दे