Để lấy ngẫu nhiên một giá trị từ một danh sách các giá trị cố định (không phải từ bảng), MySQL cung cấp hàm ELT() kết hợp với RAND().
Cú pháp
ELT(N, str1, str2, str3, ...)
Trả về đối số thứ N (1-based index). Nếu N < 1 hoặc N > số lượng đối số, trả về NULL.
Ví dụ: Chọn ngẫu nhiên từ 10 giá trị 100, 200, ..., 1000
mysql> SELECT ELT(FLOOR(RAND() * 10) + 1,
100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)
AS random_value_from_listOfValues;
Kết quả lần 1
+--------------------------------+
| random_value_from_listOfValues |
+--------------------------------+
| 1000 |
+--------------------------------+
Kết quả lần 2 (chạy lại)
+--------------------------------+
| random_value_from_listOfValues |
+--------------------------------+
| 400 |
+--------------------------------+
Giải thích
RAND(): Sinh số thực ngẫu nhiên [0, 1).RAND() * 10: Số thực [0, 10).FLOOR(...): Số nguyên 0 đến 9.+ 1: Số nguyên 1 đến 10 (vị trí trong ELT).ELT(..., 100, 200, ...): Trả về giá trị tại vị trí đó.
Ứng dụng thực tế
- Chọn ngẫu nhiên một banner quảng cáo từ danh sách cố định.
- Gán ngẫu nhiên trạng thái test (A/B testing).
- Lấy mẫu ngẫu nhiên từ tập giá trị enum/lookup nhỏ.
Lưu ý: RAND() được tính lại cho mỗi hàng. Nếu dùng trong SELECT nhiều hàng, mỗi hàng có giá trị ngẫu nhiên độc lập.