我需要从表中的记录中随机抽取 1% 的样本(行数每秒都在增长)。
我的想法是
SELECT DISTINCT
random(),
name,
age,
registrationNumber
FROM everGrowingTable
ORDER BY random desc
LIMIT (
(select count(*) from everGrowingTable) * 0.01
) -- this is attempting to get 1%
编译器提示 *
运算符。但是,当我对表格大小进行硬编码时,这很好。
我试过了 IBM documentation ,但这讨论的是使用已知值而不是增长值的计算(我的表中就是这种情况)
似乎没有执行此操作的 Aginity SQL 函数。我注意到 Aginity Workbench Intellisense 中的 MINUS 函数,但遗憾的是,没有等效的乘法。
最佳答案
您可以在子查询中使用窗口函数为每条记录分配一个随机数并计算总记录数,然后在外部查询中进行过滤:
SELECT name, age, registrationNumber
FROM (
SELECT
name,
age,
registrationNumber,
ROW_NUMBER() OVER(ORDER BY random()) rn,
COUNT(*) OVER() cnt
FROM everGrowingTable
) x
WHERE rn <= cnt / 100
ORDER BY rn
关于sql - 在 Aginity Workbench SQL 中选择 1% 的样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054135/