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

MySQL-এ ORDER BY RAND() দিয়ে গ্রুপ রেখে র‍্যান্ডম করা

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) এর জন্য একই র‍্যান্ডম ভ্যালু জেনারেট করে, ফলে একই মার্কসের রোয়গুলো একসাথে থাকে।
  • প্রতিবার এক্সিকিউশনে অর্ডার ভিন্ন হতে পারে, কিন্তু গ্রুপিং বজায় থাকবে।
  1. MySQL-এ VARCHAR কলামে স্ট্রিং ও সংখ্যা মিশ্রিত ডেটা সর্ট করা (ORDER BY + 0)

  2. MySQL-এ GROUP BY HAVING ব্যবহার করে ডুপ্লিকেট কলাম মান বের করা

  3. MySQL-এ ORDER BY ASC করার সময় NULL মানগুলো শেষে রাখা (CASE WHEN)

  4. সি-এ rand() ও srand()