GROUP BY দিয়ে গ্রুপ করার পর ORDER BY FIELD() ব্যবহার করে গ্রুপগুলো কাস্টম ক্রমে সাজানো যায়।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (Message TEXT); Query OK, 0 rows affected (1.15 sec)
mysql> INSERT INTO DemoTable VALUES ('Good');
Query OK, 1 row affected (0.43 sec)
mysql> INSERT INTO DemoTable VALUES ('Bye');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES ('Awesome');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES ('Bye');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO DemoTable VALUES ('Good');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES ('Amazing');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES ('Awesome');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES ('Bye');
Query OK, 1 row affected (0.12 sec)
সকল রেকর্ড
mysql> SELECT * FROM DemoTable;
আউটপুট:
+---------+ | Message | +---------+ | Good | | Bye | | Awesome | | Bye | | Good | | Amazing | | Awesome | | Bye | +---------+ 8 rows in set (0.00 sec)
গ্রুপ করে কাস্টম ক্রমে সর্ট
mysql> SELECT * FROM DemoTable GROUP BY Message ORDER BY FIELD(Message, 'Amazing', 'Awesome', 'Good', 'Bye');
ফলাফল (গ্রুপ করা হয়েছে, ক্রম: Amazing, Awesome, Good, Bye):
+---------+ | Message | +---------+ | Amazing | | Awesome | | Good | | Bye | +---------+ 4 rows in set (0.04 sec)
FIELD() ফাংশন ব্যাখ্যা
FIELD(str, val1, val2, ...)- str যেটার সাথে মিলে, তার পজিশন (১-ভিত্তিক) রিটার্ন করে।- মিলে না হলে ০ রিটার্ন করে (শেষে আসে)।
- এখানে 'Amazing'=১, 'Awesome'=২, 'Good'=৩, 'Bye'=৪।
শুধু গ্রুপ করা (অ্যাক্টিভ ছাড়া)
MySQL-এ GROUP BY বাই ডিফল্ট প্রথম রো নেয় (ANY_VALUE)। নির্দিষ্ট কলাম চাইলে ANY_VALUE(col) বা অ্যাক্টিভ ফাংশন ব্যবহার করুন। MySQL 5.7+ ONLY_FULL_GROUP_BY মোডে স্ট্রিক্ট।