如何在 Redshift 中仅输出随机 xx% 的查询输出记录?
Posted
技术标签:
【中文标题】如何在 Redshift 中仅输出随机 xx% 的查询输出记录?【英文标题】:How to output only random xx% of query output records in Redshift? 【发布时间】:2020-02-18 20:22:04 【问题描述】:当您不知道返回的记录数时,有没有办法只输出 Redshift 中输出记录总数的百分比?
假设查询的输出将是 1000 条记录。您只想随机选择其中的 60%...所以在这种情况下将是 600 条记录。
如果我知道输出总是1000,那么我会使用LIMIT 600。但是我不知道会返回多少条记录,我希望它是可变的..
有什么想法吗?
PS: 尝试使用 LIMIT (0.6*COUNT(*)) 但没有用。错误是“LIMIT 不带变量”
【问题讨论】:
【参考方案1】:如果您不需要 准确 条记录但大约 60%,那么我建议:
where random() <= 0.6
如果您确实需要一个确切的数字,那么:
select t.*
from (select t.*,
row_number() over (order by random()) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum <= 0.6 * cnt;
【讨论】:
您的意思是只将上面的 where random() 添加到查询中吗? (是的,我需要返回记录总数的百分比,而不是确切的数字) @ZelelB 。 . .然后使用第一个版本。它应该比尝试对数据进行排序更快。 不知何故我不明白其中的区别......你都使用 0.6(所以 60%) 确切的数字在哪里?你能提供一个例子吗?对不起,速度很慢:Dwhere random() <= 0.6
将为每一行生成一个随机数。假设随机数是均匀分布的,则该语句将在 60% 的时间内评估为TRUE
。同样,如果您只想要 10 个随机行,您可以使用 ORDER BY RANDOM() LIMIT 10
。以上是关于如何在 Redshift 中仅输出随机 xx% 的查询输出记录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 nvidia/cuda 基础 docker 中仅安装 nvcc?
从数据库中提取数据时如何在 GridView 中仅显示日期? C#