একই কোয়েরিতে সব সারির নামগুলো একসাথে কম্বাইন করে (ডিলিমিটারসহ) এবং আইডি সমষ্টি বের করতে GROUP_CONCAT() এবং SUM() ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1960 (
StudentId INT,
StudentName VARCHAR(20)
);
mysql> INSERT INTO DemoTable1960 VALUES
(100, 'Chris'), (101, 'Bob'), (102, 'David'), (103, 'Mike');
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1960;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 100 | Chris | | 101 | Bob | | 102 | David | | 103 | Mike | +-----------+-------------+
কোয়ারী: SUM + GROUP_CONCAT
mysql> SELECT SUM(StudentId), GROUP_CONCAT(StudentName SEPARATOR '.') AS ListOfStudent
FROM DemoTable1960;
আউটপুট:
+----------------+----------------------+ | sum(StudentId) | ListOfStudent | +----------------+----------------------+ | 406 | Chris.Bob.David.Mike | +----------------+----------------------+
ফাংশন ব্যাখ্যা
SUM(StudentId)— সব সারির StudentId যোগফল (১০০+১০১+১০২+১০৩ = ৪০৬)।GROUP_CONCAT(StudentName SEPARATOR '.')— সব নাম '.' দিয়ে জড়িয়ে এক স্ট্রিংয়ে। ডিফল্ট সেপারেটর কমা (,)।ORDER BY.Group_CONCAT-এ:GROUP_CONCAT(StudentName ORDER BY StudentId SEPARATOR '.')।DISTINCT:GROUP_CONCAT(DISTINCT StudentName ...)— ডুপ্লিকেট বাদ।LIMIT(MySQL 8.0+):GROUP_CONCAT(... LIMIT 10)।
গুরুত্বপূর্ণ সীমাবদ্ধতা: group_concat_max_len
- ডিফল্ট সর্বোচ্চ দৈর্ঘ্য ১০২৪ বাইট। বড় রেজাল্ট কাটা যাবে।
- বাড়াতে:
SET SESSION group_concat_max_len = 1000000;(সেশন-লেভেল) বাmy.cnf-এ।
বিকল্প: JSON_ARRAYAGG (MySQL 5.7.22+)
SELECT SUM(StudentId), JSON_ARRAYAGG(StudentName ORDER BY StudentId) AS names_json FROM DemoTable1960;
আউটপুট: [\"Chris\", \"Bob\", \"David\", \"Mike\"] (পার্স করা সহজ, লেন্থ লিমিট নেই)।
সতর্কতা
GROUP_CONCATبدون GROUP BY পুরো টেবিলের জন্য এক সারি রিটার্ন করে।- GROUP BY সহ ব্যবহার করলে গ্রুপ অনুযারি আলাদা আলাদা কম্বাইনড স্ট্রিং পাওয়া যায়।