您可以使用窗口函数 PERCENT_RANK
SELECT *
FROM
(
select *, PERCENT_RANK() OVER (PARTITION BY columnname ORDER BY random()) AS pcrnk
from tablename
where columnname = 'A'
) q
WHERE pcrnk <= 0.05
如果你不想在结果中看到那个 pcrnk?
SELECT (t).*
FROM
(
select t, PERCENT_RANK() OVER (PARTITION BY columnname ORDER BY random()) AS pcrnk
from tablename t
where columnname = 'A'
) q
WHERE pcrnk <= 0.05
在这里测试db<>fiddle
columnname = 'A'
如果有 100 个“A”和 1000 个“B”, 这些查询将根据标准 Fe 检索正常检索内容的 5% ,然后它们返回 5 条记录。
如果要返回表中所有记录的 5%?然后这是另一个技巧。
select *
from tablename
where columnname = 'A'
order by random()
limit 0.05 * (select count(*) from tablename)