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

MySQL কোয়েরি রেজাল্টে কলাম মানকে কলাম নাম বানানো (Pivot)

কোয়েরি রেজাল্টে রো ভ্যালুকে কলাম হেডার বানাতে (Pivot) CASE স্টেটমেন্ট সাথে MAX() অগ্রেগেট ফাংশন ব্যবহার করুন।

সিনট্যাক্স

SELECT yourIdColumnName,
       MAX(CASE WHEN yourColumnName1 = 'value1' THEN yourColumnName2 ELSE NULL END) AS 'value1',
       MAX(CASE WHEN yourColumnName1 = 'value2' THEN yourColumnName2 ELSE NULL END) AS 'value2',
       ...
FROM yourTableName
GROUP BY yourIdColumnName
ORDER BY yourIdColumnName;

উদাহরণ দিয়ে বুঝি

টেবিল তৈরি করুন:

mysql> CREATE TABLE valueAsColumn (
    -> UserId INT,
    -> UserColumn1 VARCHAR(10),
    -> UserColumn2 VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.75 sec)

রেকর্ড ইনসার্ট করুন:

mysql> INSERT INTO valueAsColumn VALUES(0, 'John', 'A+');
mysql> INSERT INTO valueAsColumn VALUES(0, 'Carol', 'B');
mysql> INSERT INTO valueAsColumn VALUES(0, 'Sam', 'C');
mysql> INSERT INTO valueAsColumn VALUES(1, 'John', 'D');
mysql> INSERT INTO valueAsColumn VALUES(1, 'Carol', 'A');
mysql> INSERT INTO valueAsColumn VALUES(1, 'Carol', 'C');

সোর্স ডেটা:

mysql> SELECT * FROM valueAsColumn;
+--------+-------------+-------------+
| UserId | UserColumn1 | UserColumn2 |
+--------+-------------+-------------+
|      0 | John        | A+          |
|      0 | Carol       | B           |
|      0 | Sam         | C           |
|      1 | John        | D           |
|      1 | Carol       | A           |
|      1 | Carol       | C           |
+--------+-------------+-------------+
6 rows in set (0.00 sec)

Pivot কোয়েরি (UserColumn1 এর মানকে কলাম বানানো)

mysql> SELECT UserId,
    -> MAX(CASE WHEN UserColumn1 = 'John' THEN UserColumn2 ELSE NULL END) AS 'John',
    -> MAX(CASE WHEN UserColumn1 = 'Carol' THEN UserColumn2 ELSE NULL END) AS 'Carol',
    -> MAX(CASE WHEN UserColumn1 = 'Sam' THEN UserColumn2 ELSE NULL END) AS 'Sam'
    -> FROM valueAsColumn
    -> GROUP BY UserId
    -> ORDER BY UserId;
+--------+------+-------+------+
| UserId | John | Carol | Sam  |
+--------+------+-------+------+
|      0 | A+   | B     | C    |
|      1 | D    | C     | NULL |
+--------+------+-------+------+
2 rows in set (0.00 sec)

ব্যাখ্যা:

  • CASE WHEN ... THEN ... ELSE NULL END - শর্তমতো মান বেছে নেয়
  • MAX() - একই গ্রুপে একাধিক মান থাকলে সর্বোচ্চটি নেয় (Non-NULL মান)
  • GROUP BY UserId - UserId অনুযায়ী গ্রুপিং

UserId=1, Carol-এ দুইটি মান (A, C) থাকায় MAX() 'C' রিটার্ন করেছে।

  1. MySQL কোয়েরি নাম দিয়ে গ্রুপ বাই করে কাউন্ট নতুন কলামে দেখানো

  2. MySQL কোয়েরি: ডISTINCT ভ্যালুর আওতা গণনা করে নতুন কলামে প্রদর্শন করা

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

  4. MySQL-এ একক কোয়ারিতে সব কলামের জন্য এলিয়াস (Alias) সেট করা