MySQL-এ ORDER BY RAND() ব্যবহার করে র্যান্ডম অর্ডার করা যায়, কিন্তু ডুপ্লিকেট ভ্যালুগুলো একসাথে রাখতে (গ্রুপ করে) এক্সপ্রেশন ব্যবহার করা হয়।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> create table DemoTable (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentMarks int
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> insert into DemoTable(StudentMarks) values(98);
mysql> insert into DemoTable(StudentMarks) values(98);
mysql> insert into DemoTable(StudentMarks) values(78);
mysql> insert into DemoTable(StudentMarks) values(78);
mysql> insert into DemoTable(StudentMarks) values(45);
mysql> insert into DemoTable(StudentMarks) values(56);
সকল রেকর্ড
mysql> select * from DemoTable; +-----------+--------------+ | StudentId | StudentMarks | +-----------+--------------+ | 1 | 98 | | 2 | 98 | | 3 | 78 | | 4 | 78 | | 5 | 45 | | 6 | 56 | +-----------+--------------+ 6 rows in set (0.00 sec)
গ্রুপ রেখে র্যান্ডম অর্ডার করার কোয়েরি
mysql> select * from DemoTable order by rand(StudentMarks*100*RAND());
আউটপুট (উদাহরণ)
+-----------+--------------+ | StudentId | StudentMarks | +-----------+--------------+ | 3 | 78 | | 6 | 56 | | 5 | 45 | | 4 | 78 | | 1 | 98 | | 2 | 98 | +-----------+--------------+ 6 rows in set (0.00 sec)
ব্যাখ্যা
rand(StudentMarks*100*RAND())এক্সপ্রেশন প্রতিটি গ্রুপ (এখানে StudentMarks) এর জন্য একই র্যান্ডম ভ্যালু জেনারেট করে, ফলে একই মার্কসের রোয়গুলো একসাথে থাকে।- প্রতিবার এক্সিকিউশনে অর্ডার ভিন্ন হতে পারে, কিন্তু গ্রুপিং বজায় থাকবে।