Как получить записи случайным образом из базы данных оракула? - PullRequest
63 голосов
/ 26 марта 2012

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

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

Ответы [ 6 ]

93 голосов
/ 26 марта 2012
SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.VALUE)
WHERE  rownum < 21;
37 голосов
/ 29 марта 2012

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

SELECT *
FROM   table SAMPLE(20);

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

12 голосов
/ 03 апреля 2014
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;

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

8 голосов
/ 26 марта 2012
SELECT column FROM
( SELECT column, dbms_random.value FROM table ORDER BY 2 )
where rownum <= 20;
3 голосов
/ 26 марта 2012

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

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

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

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

0 голосов
/ 18 июля 2019
Мы должны использовать некоторые запросы, которые будут давать нам случайный столбец из

таблицы

У нас есть таблица учителя

Синтаксис Oracle

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...