sql - 如何对另一个表中的记录数进行采样?
问题描述
我有代码,我在其中抽样 50,000 条随机记录。IE,
SELECT * FROM Table1
SAMPLE 50000;
这样可行。但是,我真正想做的是对不同表中的记录数进行采样。IE,
SELECT * FROM Table1
SAMPLE count(*) FROM Table2;
我得到一个错误。我究竟做错了什么?
解决方案
这不像样本那样随机化,所以请记住这一点。但是也不会有明显的模式,我相信它是由磁盘位置决定的(不要引用我的话)。
SELECT *
FROM Table1
QUALIFY ROW_NUMBER() OVER
( PARTITION BY 1
ORDER BY 1
) <=
( SELECT COUNT(*)
FROM Table2
);
更好的方法
SELECT TMP.* -- Or list the columns you want with "rnd"
FROM ( SELECT RANDOM(-10000000,10000000) rnd,
T1.*
FROM Table1 T1
) TMP
QUALIFY ROW_NUMBER() OVER
( ORDER BY rnd
) <=
( SELECT COUNT(*)
FROM Table2
);
推荐阅读
- java - 使用名为 Wait 的变量声明特征会导致覆盖编译器错误
- html - 在浏览器中测试 Quill 生成的 HTML
- html - 使用 href 在 HTML 中传递参数
- python - 如何在python中使用csv文件中的边框构建表格
- javascript - 将语言环境日期转换为日期对象
- angular - 如何使用 navigationExtras 动态发送数据数组?
- reactjs - 非反应函数中的 Redux
- javascript - 使用 JS 替换 DOM 中的 html
- powershell - 计算文本字符串的实例并输出到文本文件
- java - 对于其他非模块化项目,如何使 Java 类在其模块之外不可见?