【发布时间】:2013-04-08 03:09:27
【问题描述】:
我正在尝试从 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
【问题讨论】:
-
如果没有
order by,rownum并没有真正意义上的“表底”概念。在应用rownum过滤器(在外部select中)之前,您可以通过dbms_random.value明确订购您的样本,如果它是一个小表,您可能根本不需要样本? -
“代表”是什么意思?通常,没有 order by 子句的查询结果集中记录的顺序是任意的。但是,您可以通过使用
dbms_random对其进行排序来明确随机化它。例如:select * from ps_ledger where deptid ='7000064' order by dbms_random.value.
标签: oracle sample random-sample