GROUP_CONCAT आदेश द्वारा


137

मेरे पास एक तालिका है:

+-----------+-------+------------+
| client_id | views | percentage |
+-----------+-------+------------+
|         1 |     6 |         20 |
|         1 |     4 |         55 |
|         1 |     9 |         56 |
|         1 |     2 |         67 |
|         1 |     7 |         80 |
|         1 |     5 |         66 |
|         1 |     3 |         33 |
|         1 |     8 |         34 |
|         1 |     1 |         52 |

मैंने कोशिश की group_concat:

SELECT li.client_id, group_concat(li.views) AS views,  
group_concat(li.percentage) FROM li GROUP BY client_id;

+-----------+-------------------+-----------------------------+
| client_id | views             | group_concat(li.percentage) |
+-----------+-------------------+-----------------------------+
|         1 | 6,4,9,2,7,5,3,8,1 | 20,55,56,67,80,66,33,34,52  |
+-----------+-------------------+-----------------------------+

लेकिन मैं विचारों को क्रम में लाना चाहता हूं, जैसे:

+-----------+-------------------+----------------------------+
| client_id | views             | percentage                 |
+-----------+-------------------+----------------------------+
|         1 | 1,2,3,4,5,6,7,8,9 | 52,67,33,55,66,20,80,34,56 |
+-----------+-------------------+----------------------------+

2
कॉमा से अलग मूल्यों के रूप में संग्रहीत तालिका में विचारों और प्रतिशत के मूल्य हैं?
वीरेंद्र

नहीं, वे इस तरह से संग्रहित नहीं हैं, लेकिन मैंने उन्हें अपनी क्वेरी द्वारा बनाया, यानी, group_concat के साथ
ronquiq

जवाबों:


305

आप फ़ंक्शन के ORDER BYअंदर GROUP_CONCATइस तरह से उपयोग कर सकते हैं :

SELECT li.client_id, group_concat(li.percentage ORDER BY li.views ASC) AS views, 
group_concat(li.percentage ORDER BY li.percentage ASC) 
FROM li GROUP BY client_id

11
क्या ऐसा नहीं होना चाहिए group_concat(li.percentage ORDER BY li.views ASC)कि प्रतिशत उस क्रम से सामने आए जो विचारों से मेल खाता है, जैसा कि मूल पोस्ट द्वारा अनुरोध किया गया है?
काई कार्वर

@aleroot, क्या यह क्वेरी MySQL के लिए विशिष्ट है?
पचेरियर

हाँ, GROUP_CONCAT एक MySQL केवल फ़ंक्शन है, हालांकि एक समान परिणाम अन्य डेटाबेस पर एक सरोगेट फ़ंक्शन के साथ प्राप्त किया जा सकता है ...
aleroot

2
यदि आप group_concat () ing के समान अभिव्यक्ति द्वारा group_concat का आदेश दे रहे हैं, तो आप बस लिख सकते हैं group_concat(li.views ORDER BY 1)। सबसे आसान!
चल रहा

1
यदि आप विभाजक का उपयोग कर रहे हैं: SELECT GROUP_CONCAT(CONCAT(u.RegionName,'-',u.UserName) ORDER BY u.RegionName SEPARATOR '@@')
हिमालय गर्ग



1

IMPALA में, Group_CONCAT में ऑर्डर नहीं होने से कोडर्सको पर समस्या हो सकती है। हमारे पास इसके लिए कुछ हल है (हमें Rax / इम्पाला के लिए इसकी आवश्यकता है)। यदि आपको IMPAL में ORDER BY खंड के साथ GROUP_CONCAT परिणाम की आवश्यकता है, तो इस ब्लॉग पोस्ट पर एक नज़र डालें: http://raxdb.com/blog/sorting-by-regex/


नया लिंक होना चाहिए codersco.com/blog/2016/06/sort-by-regex
John
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.