Как получить записи случайным образом из базы данных оракула?

Мне нужно выбрать строки случайным образом. Пример: Предположим, таблица состоит из 100 записей, но мне нужно получить только 20 записей из этих 100 записей, и выбор записей будет происходить случайным образом ... как я могу получить из него? Я использую оракула в качестве моей базы данных. любое предложение очень помогло бы мне. Заранее спасибо..

Ответы на вопрос(5)

Решение Вопроса
SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.VALUE)
WHERE  rownum < 21;
 Evan Kroske08 дек. 2017 г., 21:55
Этот подход очень медленный
 Nishant Sharma26 мар. 2012 г., 10:02
Ударь меня к этому. Это, однако, только выберет первые 20 строк в таблице и упорядочит их случайным образом.
 Simon MᶜKenzie27 янв. 2017 г., 00:43
@NishantSharma, строки рандомизированы,тогда ограничено - ваш комментарий не верный.
 rvheddeg04 авг. 2015 г., 09:53
Вы должны знать, что это очень тяжелая операция для больших таблиц, потому что она сначала назначит случайное число для КАЖДОЙ строки, затем отсортирует это значение и затем извлечет из него некоторые записи.
 Filburt26 мар. 2012 г., 10:01
Не должно ли это бытьDBMS_RANDOM.VALUE?
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;

ОБРАЗЕЦ() не являетсягарантированный чтобы дать вам ровно 20 строк, но они могут подойти (и могут работать значительно лучше, чем полный запрос + сортировка случайным образом для больших таблиц):

Обратите внимание20 Вот приблизительный процент, а не количество желаемых строк. В этом случае, поскольку у вас есть 100 строк, для получения примерно 20 строк вы запрашиваете 20% выборки.

 Javier Muñoz21 нояб. 2017 г., 18:02
Это прекрасно работает для меня! Спасибо!
 craigrs8428 июл. 2014 г., 22:26
выборка быстрая, но не очень случайная. записи в верхней / начале таблицы, как правило, предпочтительнее.
 Jeffrey Kemp29 июл. 2014 г., 00:55
это произойдет, если вы остановите запрос до того, как он пройдет через всю таблицу.
 craigrs8429 июл. 2014 г., 19:21
Извините, я допустил ошибку, ваш пост в порядке и результаты распределены поровну. Когда вы добавляете «where rownum <= 20» в сочетании с sample (20), данные начинают становиться менее случайными.
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

 Jeffrey Kemp18 июн. 2015 г., 05:01
Остановка выборки после 20 строк приведет к неслучайным результатам (строки, найденные ранее в таблице, будут возвращаться гораздо чаще, чем более поздние). Кроме того, это не гарантирует возврата 20 строк.

я думаю, вам лучше выбрать из них произвольно упорядоченную серию и выбрать первые 20 из этого набора.

Что-то вроде:

Select *
  from (select *
          from table
         order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM
 where rownum < 21;

Лучше всего использовать для небольших таблиц, чтобы не выбирать большие порции данных, а только отбрасывать большую их часть.

Ваш ответ на вопрос