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

标签 sql database random netezza aginity

我需要从表中的记录中随机抽取 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/

相关文章:

java - 如何删除行并编辑 JTable 上保存的任何数据并将其更新到 mySQL 数据库

sql - 测量两个纬度/经度点之间的距离

mysql - 通信链路故障 - 使用 PhpStorm 连接到 MySQL

mysql - SELECT * WHERE var == [众多选择之一]

mysql - 如何正确排序 SQL 中的物化路径?

mysql - 按 SQL 查询排序

sql - 如何按以下别名列分组

java - 测试随机盐法

random - 在 python 3.5 中使用 random.choices() 的替代方法是什么

c++ - 我不知道这个随机发生器有什么问题