Как получить записи случайным образом из базы данных oracle?
Мне нужно выбрать строки случайным образом. Пример: предположим, таблица состоит из 100 записей ,но мне нужно получить только 20 записей из этих 100 записей, и выбор записей будет случайным.. как я выйду из этого? Я использую oracle в качестве своей БД. любое предложение мне очень поможет. Спасибо заранее..
5 ответов
SAMPLE () не гарантированный чтобы дать вам ровно 20 строк, но может быть подходящим (и может работать значительно лучше, чем полный запрос + сортировка по случайным для больших таблиц):
SELECT *
FROM table SAMPLE(20);
Примечание:20
вот приблизительный процент, а не количество нужных строк. В этом случае, поскольку у вас есть 100 строк, чтобы получить примерно 20 строк, вы просите образец 20%.
SELECT * FROM table SAMPLE(10) 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;
лучше всего использовать для небольших таблиц, чтобы избежать выбора больших кусков данных только для удаления большинства из них.