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

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

5 ответов


SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.VALUE)
WHERE  rownum < 21;

SAMPLE () не гарантированный чтобы дать вам ровно 20 строк, но может быть подходящим (и может работать значительно лучше, чем полный запрос + сортировка по случайным для больших таблиц):

SELECT *
FROM   table SAMPLE(20);

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


SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

Это более эффективно, поскольку ему не нужно сортировать таблицу.


SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;

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

что-то типа:

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

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