gpt4 book ai didi

oracle - 从 Oracle 采样,需要准确数量的结果(示例子句)

转载 作者:行者123 更新时间:2023-12-02 09:22:44 27 4
gpt4 key购买 nike

我正在尝试从 Peoplesoft 数据库中随机抽取总体样本。在线搜索使我认为 select 语句的 Sample 子句可能是我们使用的一个可行选项,但是我无法理解 Sample 子句如何确定返回的样本数量。我查看了这里找到的oracle文档: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2065953

但是上面的引用文献仅讨论了用于创建示例的语法。我的问题的原因是我需要了解样本百分比如何确定返回的样本大小。看起来它会将随机数应用于您要求的百分比,然后使用种子数来计算每个“n”记录。我们的要求是,我们提取精确数量的样本,例如,它们是随机选择的,并且它们代表整个表(或至少代表我们使用过滤器选择的数据分组)

在 10200 个项目的总体中,如果我需要大约 100 个项目的样本,我可以使用以下语句:

SELECT * FROM PS_LEDGER SAMPLE(1) --1 % of my total population
WHERE DEPTID = '700064'

但是,我们需要提取准确数量的样本(在本例中为 100),这样我就可以选择一个几乎总是返回超过我需要的数量的样本大小,然后将其缩小 IE

SELECT Count(*) FROM PS_LEDGER SAMPLE(2.5) --this percent must always give > 100 items
WHERE DEPTID = '700064' and rownum < 101

我担心这样做是我的样本不能统一代表整个人群。例如,如果示例函数在创建自己的随机生成的种子后仅提取每 N 条记录,则选择 rownum < 101 将截断从表底部选择的所有记录。我正在寻找一种从表中准确提取 100 条记录的方法,这些记录是随机选择的并且相当能代表整个表。请帮忙!!

最佳答案

借用 jonearles 的示例表,我看到了完全相同的情况(在 OEL 开发人员镜像上的 11gR2 中),通常获取的 a 值严重偏向于 1;对于小样本,有时我根本看不到。通过我在评论中提到的额外随机/限制步骤:

select a, count(*) from (
select * from test1 sample (1)
order by dbms_random.value
)
where rownum < 101
group by a;

...经过三轮运行,我得到了:

         A   COUNT(*)
---------- ----------
1 71
2 29

A COUNT(*)
---------- ----------
1 100

A COUNT(*)
---------- ----------
1 64
2 36

是的,第二次运行时,100% 确实返回为 1。倾斜本身似乎相当随机。我尝试使用 block 修饰符,这似乎没有什么区别,也许令人惊讶 - 我可能认为在这种情况下情况会变得更糟。

这可能会更慢,尤其是对于小样本量,因为它必须覆盖整个表;但确实给了我相当均匀的 split :

select a, count(*) from (
select a, b from (
select a, b, row_number() over (order by dbms_random.value) as rn
from test1
)
where rn < 101
)
group by a;

经过三轮运行,我得到:

         A   COUNT(*)
---------- ----------
1 48
2 52

A COUNT(*)
---------- ----------
1 57
2 43

A COUNT(*)
---------- ----------
1 49
2 51

...看起来更健康一点。当然是YMMV。

<小时/>

This Oracle article涵盖了一些采样技术,您可能还需要评估 ora_hash 方法,以及分层版本(如果您的数据传播和“代表性”要求需要它)。

关于oracle - 从 Oracle 采样,需要准确数量的结果(示例子句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16024737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com