কম্পিউটার টিউটোরিয়াল

MySQL-এ GROUP_CONCAT() এবং SUM() দিয়ে একাধিক সারির স্ট্রিং কম্বাইন এবং আইডি যোগফল করা

একই কোয়েরিতে সব সারির নামগুলো একসাথে কম্বাইন করে (ডিলিমিটারসহ) এবং আইডি সমষ্টি বের করতে 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 সহ ব্যবহার করলে গ্রুপ অনুযারি আলাদা আলাদা কম্বাইনড স্ট্রিং পাওয়া যায়।
  1. MySQL-এ GROUP_CONCAT() দিয়ে সকল সারির মান কমা দিয়ে এক সারিতে দেখানো

  2. MySQL-এ একাধিক সারি গুনুন এবং ফলাফল আলাদা কলামে (একক সারি) দেখান

  3. MySQL-এ GROUP BY ও ORDER BY ব্যবহার করে যোগফল বের করে সর্ট করা

  4. MySQL-এ DATE_FORMAT() ব্যবহার করে ডেট থেকে মাস কলাম বানিয়ে ডুপ্লিকেট তারিখের Amount যোগফল বের করা