Я пытаюсь получить случайную выборку населения из базы данных Peoplesoft. Поиски в Интернете привели меня к мысли, что предложение Sample в операторе select может быть жизнеспособным вариантом для нас, однако у меня возникли проблемы с пониманием того, как предложение Sample определяет количество возвращаемых образцов. Я просмотрел документацию оракула, найденную здесь: 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 записей, которые выбираются случайным образом и достаточно репрезентативны для всей таблицы. Пожалуйста помоги!!
order by
уrownum
на самом деле нет понятия «нижняя часть таблицы». Вы можете явно упорядочить свой образец поdbms_random.value
перед применением фильтраrownum
(во внешнемselect
), а если это небольшая таблица, вам может вообще не понадобиться образец? - person Alex Poole   schedule 16.04.2013dbms_random
. пример:select * from ps_ledger where deptid ='7000064' order by dbms_random.value
. - person collapsar   schedule 16.04.2013