我想从结果集中随机获得50%.我try 过的很接近:

SELECT * FROM Customers
WHERE RAND() < 0.5;

但这给了我少于或多于50%的结果集.换句话说,这并不稳定.

第二次try 如下:

SELECT * FROM Customers
ORDER BY RAND()
LIMIT (SELECT COUNT(*) / 2 FROM Customers);

但我有一个错误:您的SQL语法中有错误;请判断与您的SQL服务器版本对应的手册,了解第3行"(SELECT RST(*)/ 2 FROM Customers)"附近使用的正确语法.

您可以在这里测试:https://www.w3schools.com/MySQL/trymysql.asp?filename=trysql_select_all

预期结果应该是将顺序随机化,然后 Select 结果集的50%.

推荐答案

在SQL 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;

Mysql相关问答推荐

SQL-从一个字段中 Select 值,但另一个字段中不包含零值

从MySQL JSON列中检索数组中的所有答案

从单行中获取最大日期的最佳方法

如何确保 SQL 记录的列不引用它自己的主键?

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

按优先级 for each 具有 status_id 的员工 Select 单行

使用来自另一个表 mysql 的值将新行插入到表中

判断一列中的多个值并返回值 1 或 0

在 Presto Athena 中将字符串转换为数组

从 2 个不同的表中获取数据并将它们加入 sql

用数字和字母对 VARCHAR 列进行排序

判断一对记录是否属于多个组ID

MySQL使用多列 Select 重复记录

如何查看打开了多少 MySQL 连接?

在 MySQL 中,我应该 Select 哪种排序规则?

MySQL 在每个唯一值第一次出现时 Select 行

MySQL查询/子句执行顺序

MySQL DAYOFWEEK() - 我的一周从星期一开始

MySQL导入数据库但忽略特定表

MySQL - 重复表