返回随机结果的50%

问题描述 投票:0回答:1

我想从结果集中随机获取 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
1个回答
0
投票

在 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;
© www.soinside.com 2019 - 2024. All rights reserved.