Подтвердить что ты не робот

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

Мне нужно выбрать строки случайным образом из базы данных Oracle.

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

4b9b3361

Ответ 1

    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.VALUE FETCH NEXT 20 ROWS ONLY;

Ответ 2

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

SELECT *
FROM   table SAMPLE(20);

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

В итоге были представлены два способа

1) using order by DBMS_RANDOM.VALUE clause
2) using sample([%]) function

Первый способ имеет преимущество в "ПРАВИЛЬНОСТИ", что означает, что вы никогда не потерпите неудачу, получите результат, если он действительно существует, в то время как во втором случае вы можете не получить результат, даже если в нем есть случаи, удовлетворяющие условию запроса, поскольку информация уменьшается во время выборки..

Второй способ имеет преимущество в "EFFICIENT", что означает, что вы получите результат быстрее и обеспечите небольшую нагрузку на вашу базу данных. Мне было дано предупреждение от администратора базы данных, что мой запрос с использованием первого способа загружает базу данных

Вы можете выбрать один из двух способов в соответствии с вашими интересами!

Ответ 7

Мы должны использовать некоторые запросы, которые дадут нам случайный столбец из

Таблица

У нас есть учительский стол

Синтаксис Oracle

SELECT * FROM   
(
SELECT column_name FROM table_name  
ORDER BY dbms_random.value
)  
WHERE rownum = 1;

Для лучшего понимания следуйте скриншоту