1

我需要从表中随机抽取 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 文档,但这谈论的是使用已知值的计算,而不是增长的值(我的表中就是这种情况)

似乎没有执行此操作的 Aginity SQL 函数。我注意到 Aginity Workbench Intellisense 中的 MINUS 函数,但可惜没有乘法等效项。

4

1 回答 1

1

您可以在子查询中使用窗口函数为每条记录分配一个随机数并计算总记录数,然后在外部查询中进行过滤:

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
于 2019-03-07T23:13:26.173 回答