我想从结果集中随机获取 50%。我尝试过的接近的方法:
SELECT * FROM Customers
WHERE RAND() < 0.5;
但是这给了我少于或多于50%的结果集。换句话说,这并不稳定。
第二次尝试如下:
SELECT * FROM Customers
ORDER BY RAND()
LIMIT (SELECT COUNT(*) / 2 FROM Customers);
但是我有一个错误:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 3 行的“(SELECT COUNT(*) / 2 FROM Customers)”附近使用的正确语法。
您可以在这里测试:https://www.w3schools.com/MySQL/trymysql.asp?filename=trysql_select_all
预期的结果应该是随机排序,然后选择结果集中的50%。
在 MySQL 8+ 上,我们可以在此处使用
ROW_NUMBER()
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) rn,
COUNT(*) OVER () cnt
FROM Customers
)
SELECT *
FROM cte
WHERE rn <= cnt / 2;