क्या MySQL का उपयोग करके कई कॉलमों को ग्रुप में करना संभव है?


206

क्या GROUP BYMySQL SELECTक्वेरी में एक से अधिक कॉलम संभव है ? उदाहरण के लिए:

GROUP BY fV.tier_id AND 'f.form_template_id'

3
आप पंक्तियों द्वारा समूह नहीं कर सकते। आप स्तंभों के आधार पर समूह बना सकते हैं
जो फिलिप्स

यह सिंटैक्स संस्करण क्या है: stackoverflow.com/questions/2421388/…
Ciro Santilli 病 version version version

1
आपको एक से अधिक समूहों का उपयोग करने के बजाय उपखंड करने की आवश्यकता हो सकती है।
एडम एफ

जबकि अधिकांश उच्च-मतदान उत्तर अनिवार्य रूप से एक-दूसरे के समान होते हैं (वे सही सिंटैक्स दिखाते हैं, और दो स्तंभों के क्रम को बदलने के प्रभाव की व्याख्या करते हैं), यदि आपकी ज़रूरत कुछ अलग है, तो दानिकलाड के उत्तर पर विचार करें ।
टूलमेकरसेव

जवाबों:



107

हां, आप कई कॉलमों द्वारा समूह बना सकते हैं। उदाहरण के लिए,

SELECT * FROM table
GROUP BY col1, col2

परिणाम पहले col1 द्वारा, फिर col2 द्वारा समूहीकृत किए जाएंगे। MySQL में, स्तंभ प्राथमिकता बाएं से दाएं जाती है।


5
बाएं से दाएं की पसंद को समूह के आरोही क्रम पर लागू किया जाता है न कि स्तंभ समूह वरीयता पर। GROUP BYलागू होता है col1+col2। जैसे col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2और चल रहा है के रूप में सुझाव के विपरीत GROUP BY col1,col2वापस आ जाएगी । जबकि कॉल 2 की वापसी के बढ़ते क्रम को बदल देगा। डेमो: sqlfiddle.com/#/9/d5f69/1 ध्यान दें कि पंक्ति आईडी: 2 कॉलम को निष्क्रिय करने के बावजूद दोनों मामलों में वापस आ जाती है । 1,1|1,3|2,21,1|2,2GROUP BY col2, col11,1|2,2|1,32,2
fyrye

एक और परीक्षण। sqlfiddle.com/# .9/5c8763/2 निष्कर्ष। पहले परिभाषित कॉलम (साथ GROUP BY) द्वारा पहले mysql सॉर्ट । और अगर पहले परिभाषित कॉलम में समान परिणाम हैं, तो केवल समान परिणाम के भीतर दूसरे परिभाषित कॉलम के अनुसार
user2360831

के SUMसाथ उपयोग करने के संबंध में GROUP BY। यदि GROUP BYकेवल एक कॉलम के द्वारा, तो SUMप्रत्येक भिन्न (भिन्न) के सभी मानों को स्तंभ मान sqlfiddle.com/## .9/1cbde2/2 । अगर GROUP BYदो कॉलम। फिर पहले चेक में mysql अगर पहले कॉलम के मूल्य के लिए दूसरे कॉलम में अलग-अलग मान हैं। यदि हाँ, तो SUMदूसरा कॉलम sqlfiddle.com/#/9/1cbde2/1 के प्रत्येक अलग मूल्य mysql ।
user2360831

23

हां, लेकिन दो से अधिक स्तंभों को समूहीकृत करने का क्या मतलब है? खैर, यह प्रत्येक अद्वितीय जोड़ी प्रति पंक्ति द्वारा समूहीकरण के समान है। आपके द्वारा स्तंभों को क्रमबद्ध करने के क्रम में पंक्तियों को क्रमबद्ध करने का तरीका बदल जाता है।

अपने उदाहरण में, आप लिखेंगे

GROUP BY fV.tier_id, f.form_template_id

इस बीच, कोड

GROUP BY f.form_template_id, fV.tier_id

इसी तरह के परिणाम देगा, लेकिन अलग तरह से हल किया।



13

एक सरल उदाहरण का उपयोग करने के लिए, मेरे पास एक काउंटर था जो एक साइट पर प्रति विज़िट किए गए पृष्ठ पर अद्वितीय आईपी पते को संक्षेप में प्रस्तुत करने की आवश्यकता थी। जो कि मूल रूप से pagename और फिर IP द्वारा समूहीकृत है। मैंने इसे DISTINCT और GROUP BY के संयोजन से हल किया।

SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;

2
यह उत्तर ध्यान देने योग्य है, क्योंकि यह अन्य उत्तरों की तुलना में कुछ भिन्न समस्या को हल करता है।
टूलमेकरसेव

5

यदि आप एक ही समय में दो कॉलम के आधार पर पसंद करते हैं (मुझे इसे लागू करने की आवश्यकता है), तो मैंने इस बिंदु को देखा:

SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1

1
देखें लाड के जवाब के तहत ypercube की टिप्पणियाँ। एक विकल्प के रूप में विचार करें SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2:। परिणाम आमतौर पर इस उत्तर के समान दिखाई देंगे , लेकिन आंतरिक निष्पादन काफी अलग है।
टूलमेकरसैट

-2
GROUP BY CONCAT(col1, '_', col2)

37
मुझे आश्चर्य है कि कोड का सिर्फ एक लाइन के साथ एक उत्तर, प्रश्न के उत्तर के 4 साल बाद 8 (आठ!) अपवोट हो जाता है। जबकि देर और छोटी के अलावा गलत और अक्षम भी।
ypercube y

8
@ ypercube y आप यह गलत क्यों कहते हैं? यह वही है जो मैं देख रहा था, और "कई कॉलम द्वारा समूह" की एक सही व्याख्या। वास्तव में, मुझे नहीं पता कि यह "col1 द्वारा समूह, col2" का व्यवहार क्यों नहीं है जैसे मैं उम्मीद करूंगा
अब्राम

3
@ अब्रम आपको पिंग करता है, इसलिए आप नेवरहैंडक्यूक्यू को मेरा जवाब देखें। डाउनसाइड्स: यह इससे कम - बहुत कम कुशल है GROUP BY col1, col2। यह कुछ डेटा के साथ गलत परिणाम देगा। col1, col2मानों को कहें : ('a_b', 'c')एक पंक्ति में और ('a', 'b_c')दूसरी पंक्ति में। GROUP BY CONCAT के साथ यह गलत उत्तर, दो पंक्तियों को एक में समेट देगा। सही उत्तर नहीं होगा।
ypercube y

1
कोई भी आपको चयन सूची में CONCAT अभिव्यक्ति का उपयोग करने से रोकता है, अगर आपको इसकी आवश्यकता है:SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;
ypercube17

1
@ ypercube y उफ़, बेवकूफ़ मैं सोच रहा था "समूह द्वारा फू, बार" व्यवहार "जैसे ... फू संघ द्वारा समूह ... बार द्वारा समूह"। यह वास्तव में ग्रुप बाय कॉनकैट के लिए एक असामान्य मामला होगा।
अब्राम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.