মাইএসকিউএলে স্ট্রিংগুলি সংহত করতে গ্রুপের মাধ্যমে কীভাবে ব্যবহার করবেন?


351

মূলত প্রশ্নটি এটি থেকে কীভাবে পাওয়া যায়:

foo_id foo_name
1 এ
1 খ
2 সি

এটি:

foo_id foo_name
1 এবি
2 সি

13
ডাউনলোড করুন এটি কোনও কলামের স্ট্রিংয়ের নামকরণ করা সত্যিই বিভ্রান্তিকর, এটি একটি নাম যা ডেটা টাইপের মতো দেখাচ্ছে। সুতরাং যে কোনও উত্তরগুলি এর দ্বারাও প্রভাবিত হয় কারণ উত্তরগুলি দেখে মনে হয় তারা কোনও কলামের নাম উল্লেখ করার সময় কোনও ডেটা টাইপ নির্দিষ্ট করে
দিচ্ছে

2
প্রশ্ন এবং উত্তরগুলি সম্পাদনা করে @ বারলপ এটি স্থির করেছে।
অস্টুন

উত্তর:


526
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

উপরের লিঙ্কটি থেকে GROUP_CONCAT:: এই ফাংশনটি একটি গোষ্ঠীর কাছ থেকে মিলিত অ-নুল মানগুলির সাথে একটি স্ট্রিং ফলাফল দেয়। কোনও নন-নুল মান না থাকলে এটি NULL প্রদান করে।


164
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

আরও বিশদ এখানে

উপরের লিঙ্কটি থেকে GROUP_CONCAT:: এই ফাংশনটি একটি গোষ্ঠীর কাছ থেকে মিলিত অ-নুল মানগুলির সাথে একটি স্ট্রিং ফলাফল দেয়। কোনও নন-নুল মান না থাকলে এটি NULL প্রদান করে।


ফলস্বরূপ কলামের অক্ষরগুলির একটি সীমা রয়েছে। দেখতে এখানে এবং ডক্স :)
marlo

18
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id

আপনাকে কমা-সীমাবদ্ধ স্ট্রিং দেবে


17
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

: - মাইএসকিউএল-তে আপনি এক্সপ্রেশন সংমিশ্রণের মানগুলি পেতে পারেন। সদৃশ মানগুলি মুছে ফেলার জন্য, DISTINCT ধারাটি ব্যবহার করুন । ফলস্বরূপ মানগুলি বাছাই করতে, অনুচ্ছেদে অর্ডারটি ব্যবহার করুন। বিপরীত ক্রমে সাজানোর জন্য , অর্ডার বাই দফায় আপনি যে কলামটি বাছাই করছেন তার নামে DESC (অবতরণ) কীওয়ার্ডটি যুক্ত করুন । ডিফল্টটি আরোহী ক্রম; এটি ASC কীওয়ার্ড ব্যবহার করে স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে। একটি গোষ্ঠীর মানগুলির মধ্যে ডিফল্ট বিভাজক হ'ল কমা (",")। স্পষ্টভাবে একটি বিভাজক নির্দিষ্ট করতে, SEPARATOR স্ট্রিং আক্ষরিক মান যা গ্রুপ মানগুলির মধ্যে সন্নিবেশ করা উচিত তার পরে ব্যবহার করুন। বিভাজক পুরোপুরি নির্মূল করতে, SEPARATOR '' নির্দিষ্ট করুন ।

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

অথবা

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;

15

ফলাফলটি সর্বোচ্চ দৈর্ঘ্যে ছিন্ন করা হয় যা গ্রুপ_কনক্যাট_ম্যাক্স_লেন সিস্টেম ভেরিয়েবল দ্বারা প্রদত্ত হয়, যার ডিফল্ট মান হয় 1024 অক্ষর, তাই আমরা প্রথমে এটি করি:

SET group_concat_max_len=100000000;

এবং তারপরে, উদাহরণস্বরূপ:

SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id

ফলাফলের সর্বাধিক দৈর্ঘ্য যে group_concat_max_len সিস্টেম ভেরিয়েবল, যা একটি হয়েছে কর্তৃক প্রদত্ত হয় ছেঁটে ফেলা হয়েছে ডিফল্ট মান এর 1024 টি অক্ষর। ডক্স
মার্লো

এই group_concat_max_lenকনফিগারেশনের সুযোগ কী ? বর্তমান সংযোগ / সেশন, বা এটি অন্যান্য ক্লায়েন্টদের প্রভাবিত করবে?
হিমশীতল শিখা

@ ফ্রোজেনফ্লেম:> কোনও সংশোধক উপস্থিত না থাকলে এসইটি সেশন ভেরিয়েবল পরিবর্তন করে। ভেরিয়েবলের কোনও সেশন মান না থাকলে একটি ত্রুটি ঘটে occurs Dev.mysql.com/doc/refman/5.7/en/used-system-variables.html
আর্মিনোসু

3
এটি ওপির প্রশ্নের উত্তর দেয় না তবে কেবল সহায়ক তথ্য যুক্ত করে। এটি একটি মন্তব্য হওয়া উচিত, উত্তর নয়।
বিন

1
এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান এবং এটি ভবিষ্যতের পাঠকদের আরও অন্যান্য অনুরূপ প্রশ্নের সাথে আরও দরকারী করে তুলে ধরে তার দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নত করবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
ডোনাল্ড হাঁস

11

দুর্দান্ত উত্তর। আমি NULLS এও সমস্যা ছিল এবং GROUP_CONCAT এর ভিতরে একটি COALESCE অন্তর্ভুক্ত করে এটি সমাধান করতে পেরেছি। নিম্নরূপ উদাহরণ:

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;

আশাকরি ইহা অন্য কারো সাহায্য করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.