答案 0 :(得分:3)
"兰特()"早期答案中提到的函数在SQL 2k12中不起作用。对于SQL使用以下查询来使用" newid()"获取随机100行功能 (" newid()"内置于SQL函数中)
select * from table
order by newid()
offset 0 rows
fetch next 100 rows only
答案 1 :(得分:2)
对于30,000表和单个样本的表,您可以使用:
select t.*
from t
order by rand()
limit 100;
这正是您想要的。返回需要几秒钟。
如果性能是一个问题,还有其他更复杂的方法来采样数据。一种简单的方法可以减少order by
之前的行数。因此,5%的样本将加快查询速度,这是一种方法:
select t.*
from t
where rand() < 0.05
order by rand()
limit 100;
编辑:
您需要所谓的群集样本或分层样本。使用子查询:
select t.*
from t join
(select userid
from (select distinct userid from t) t
order by rand()
limit 100
) tt
on t.userid = tt.userid;
答案 2 :(得分:1)
SELECT * FROM table
ORDER BY RAND()
LIMIT 100
速度很慢,但确实有效。