sql - 用于具有动态样本大小的分层抽样的 sql 查询
问题描述
假设我们有一个这种格式的表格:
id strata sample_size
1 s1 2
2 s1 2
3 s1 2
4 s2 1
5 s2 1
....
从这个例子中,我们看到两个层 s1 和 s2。我想做的是分层抽样,样本量是最后一列。例如,我想从 s1 中随机抽样 2 个实例,从 s2 中随机抽样 1 个。任何帮助表示赞赏。请记住,我有很多阶层,硬编码是不可能的。一世
解决方案
您可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by strata order by rand()) as seqnum
from t
) t
where seqnum <= strata_size;
推荐阅读
- node.js - dns.resolve() 在 Node.js 中的作用是什么?
- json - Json 运算符似乎不适用于变量
- java - 使用 ssm 得到一个空响应,直接使用 url
- reactjs - React:具有 http 标头状态的路由器
- c - 如何在linux中获取套接字的tcp窗口大小?
- rpa - Workfusion:如何单击电子邮件中的所有超链接,除了“谢谢”之后的链接?
- c++ - 编译器是否曾经解决过命名空间的歧义?
- c# - 如何拆分/解析 JSON 数据并将其保存到 SQL 服务器中?
- java - 使用 TimeMillis 延迟打印文本
- javascript - 在 expressJS 应用程序中,是否可以在脚本执行时实时收集写入控制台的数据?