在Aginity Workbench SQL中选择1%的样本

问题描述 投票:1回答: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 documentation,但是这里讨论的是使用已知值的计算,而不是增长的值(在我的表中就是这种情况)

似乎没有一个Aginity SQL函数可以做到这一点。我注意到Aginity Workbench Intellisense中的MINUS功能,但是,没有相应的乘法。

sql database random netezza aginity
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
© www.soinside.com 2019 - 2024. All rights reserved.