首页 > 解决方案 > 如何在 Redshift 中仅输出随机 xx% 的查询输出记录?

问题描述

当您不知道返回的记录数时,有没有办法只输出 Redshift 中输出记录总数的百分比?

假设查询的输出将是 1000 条记录。您只想随机选择其中的 60%...所以在这种情况下将是 600 条记录。

如果我知道输出始终是 1000,那么我会使用 LIMIT 600。但我不知道会返回多少条记录,我希望它是可变的..

有任何想法吗?

PS:尝试使用 LIMIT (0.6*COUNT(*)) 并没有用。错误是“LIMIT 不带变量”

标签: sqlamazon-redshift

解决方案


如果您不需要确切数量的记录但大约 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;

推荐阅读