สุ่มแถวไม่ซ้ำทุกครั้งที่รัน
รวม ORDER BY RAND() กับ LIMIT
ข้อมูล Employee (8 แถว)
+----+--------+--------+
| ID | Name | Salary |
+----+--------+--------+
| 1 | Gaurav | 50000 |
| 2 | Rahul | 20000 |
| 3 | Advik | 25000 |
| 4 | Aarav | 65000 |
| 5 | Ram | 20000 |
| 6 | Mohan | 30000 |
| 7 | Aryan | NULL |
| 8 | Vinay | NULL |
+----+--------+--------+
คำสั่งสุ่ม 4 แถว
SELECT * FROM employee ORDER BY RAND() LIMIT 4;
ผลลัพธ์ 3 ครั้งติดต่อกัน (ต่างกันทุกครั้ง)
-- ครั้งที่ 1
+----+-------+--------+
| 5 | Ram | 20000 |
| 4 | Aarav | 65000 |
| 6 | Mohan | 30000 |
| 8 | Vinay | NULL |
+----+-------+--------+
-- ครั้งที่ 2
+----+--------+--------+
| 6 | Mohan | 30000 |
| 8 | Vinay | NULL |
| 2 | Rahul | 20000 |
| 1 | Gaurav | 50000 |
+----+--------+--------+
-- ครั้งที่ 3
+----+-------+--------+
| 3 | Advik | 25000 |
| 8 | Vinay | NULL |
| 7 | Aryan | NULL |
| 5 | Ram | 20000 |
+----+-------+--------+
ประโยชน์
- สุ่มตัวอย่างข้อมูล (Sampling)
- Featured items / Random quotes
- A/B Testing
ประสิทธิภาพ
- ช้ากับตารางใหญ่ (Full table scan + Filesort)
- ตาราง > 10K rows ควรใช้วิธีอื่น (WHERE RAND() < 0.01, etc.)