如何从MySQL的表中随机抽取2%的样本?
我尝试了以下查询
SELECT orderID
FROM orders
ORDER BY rand()
LIMIT 1 OFFSET (SELECT convert(0.02 * count(*), unsigned) FROM orders)
;
SELECT orderID
FROM orders
ORDER BY rand()
LIMIT (SELECT convert(0.02 * count(*), unsigned) FROM orders)
;
他们两个都给出错误。有人可以解释错误和其他方法。
数据库:Northwind
MySQL版本:8.0
答案 0 :(得分:3)
我会在这里使用ROW_NUMBER
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) rn, COUNT(*) OVER () cnt
FROM orders
)
SELECT *
FROM cte
WHERE rn < 0.02 * cnt; -- select first 2% of a random sample
答案 1 :(得分:1)
如果大约 2%足够,那么您可以使用:
SELECT orderID
FROM orders
WHERE rand() <= 0.02;
因为不需要排序,这可能是最快的方法。
请注意,结果并不是精确 2%,但是在一张大桌子上,结果将足够接近。
答案 2 :(得分:0)
您可以使用MySQL存储过程在MySQL内部创建函数。 https://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx/
CREATE PROCEDURE GetRand2PercentSample()
BEGIN
DECLARE nLimit INT DEFAULT 0;
SELECT COUNT(*) * 0.2
INTO nLimit
FROM orders;
SELECT * FROM orders ORDER BY RAND() LIMIT nLimit;
END
// to call the function
call GetRand2PercentSample()