2010-09-13 10 views
12

तो मैं इसएक अंतरिक्ष अलग स्ट्रिंग में एकाधिक पंक्तियों कम्बाइन

userid, col 
-------------- 
1, a 
1, b 
2, c 
2, d 
3, e 

की तरह 5 पंक्तियों मैं क्वेरी करना होगा कैसे तो यह इस

userid, combined 
1, a b 
2, c d 
3, e 
+0

लगभग सटीक डुप्लिकेट की: http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query –

उत्तर

13

उपयोग की तरह GROUP_CONCAT aggregate function दिखेगा:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 

डिफ़ॉल्ट विभाजक एक अल्पविराम (",") है, इसलिए आपको एक ही स्थान के SEPARATOR को निर्दिष्ट करने की आवश्यकता है आउटपुट जो आप चाहते हैं।

आप group_concat में मानों का क्रम सुनिश्चित करने के लिए चाहते हैं, का उपयोग करें:

SELECT yt.userid, 
     GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined 
    FROM YOUR_TABLE yt 
GROUP BY yt.userid 
+0

मैं कर रहा हूँ आप इस पोस्ट की जाँच कर सकते आप उन्हें रखने के लिए की जरूरत है वर्तमान में हाइव का उपयोग कर इसलिए मैं समूह को भाग से नहीं कर सकता क्योंकि GROUP_CONCAT को एग्रीगेशन फ़ंक्शन के रूप में पहचाना नहीं गया है, वैसे भी इसके आसपास? – haoxu

+0

@haoxu: अगला विकल्प (एक एसक्यूएल प्रेसीडेंट से) एक कर्सर और स्ट्रिंग कॉन्सटेनेशन होगा, लेकिन इसके लिए एक MySQL फ़ंक्शन की आवश्यकता होगी। मैं हाइव से परिचित नहीं हूं - क्या मूल प्रश्न का उपयोग करने का कोई तरीका नहीं है? –

+1

ने HiveQL में GROUP_CONCAT के लिए एक जेआईआरए अनुरोध दायर किया: https://issues.apache.org/jira/browse/HIVE-1689 –

-6

मैं बहुत यकीन है कि आप इस हाइव QL का उपयोग कर ऐसा नहीं कर सकते कर रहा हूँ। हालांकि, ऐसा करना संभव होना चाहिए यदि आप अपना नक्शा/स्क्रिप्ट घटाएं - this tutorial प्रारंभ करने के लिए देखें।

+0

उत्तर पुराना है। नए संस्करणों में विशेषताएं हैं। –

41

छत्ता में आप उपयोग कर सकते हैं

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id; 

collect_set डुप्लिकेट को हटा।

COLLECT_SET() in Hive, keep duplicates?

+1

बिल्कुल वही जो मैं चाहता था! क्वेरी द्वारा समूह के बाहर एक पंक्ति को जोड़ने के लिए एक आकर्षण की तरह काम करता है –

2
SELECT 
    userid, 
    concat_ws(" ", collect_set(col)) AS combined 
FROM table 
GROUP BY userid 
संबंधित मुद्दे