【发布时间】:2019-12-27 11:43:11
【问题描述】:
我有 table_1,它的数据如下:
Range Start Range End Frequency
10 20 90
20 30 68
30 40 314
40 40 191 (here, it means we have just 40 as data point repeating 191 times)
table_2:
group value
10 56.1
10 88.3
20 53
20 20
30 55
我需要根据 table_1 的范围获取分层样本,table_2 可以有数百万行但结果应该限制在 10k 点。
尝试以下查询:
SELECT
d.*
FROM
(
SELECT
ROW_NUMBER() OVER(
PARTITION BY group
ORDER BY group
) AS seqnum,
COUNT(*) OVER() AS ct,
COUNT(*) OVER(PARTITION BY group) AS cpt,
group, value
FROM
table_2 d
) d
WHERE
seqnum < 10000 * ( cpt * 1.0 / ct )
但对这里的分析功能使用有点困惑。
期望 10k 记录作为来自 table_2 的分层样本:
结果表:
group value
10 56.1
20 53
20 20
30 55
【问题讨论】:
-
为什么结果表中第10组只有一条记录?
-
结果表只是一个例子。基本上,结果表应该包含 table_2 中记录的子集(分层样本)
-
10000 个结果是否应该与频率成比例,因此 30-40 范围内的值大约是 20-30 范围内的值的 5 倍(即 314/68 = 4.617...时间一样多)?还有第 20 组的行是否计入 10-20 范围内,或 20-30 范围内,或两者兼而有之? (有人可能会假设您包含值 >= start 和
-
@SurendraSingh 。 . .你的问题没有意义。您的第一个表的总频率为 663,但您要求 10,000 行。剩下的 9337 行是从哪里来的?
-
你为什么不使用
sample clause:docs.oracle.com/cd/E11882_01/server.112/e41084/…?