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

dbstalker, 09 апреля

Задан диапазон от А до В . Нужно сгенерировать N случайных чисел. Попробуем это сделать вот так:

SELECT trunc(dbms_random.VALUE(A, B)) random_val FROM dual CONNECT BY LEVEL <= N

Получилось?

2 комментария

Прокоментировать

kirik17
9 апреля 2010 г. в 17:03

выборка нужного кол-ва произвольных значений из таблицы

SELECT * FROM
( SELECT * FROM table ORDER BY dbms_random.value )
WHERE rownum <= 5

Dmitry
14 апреля 2010 г. в 14:41

Десять уникальных целых чисел в интервале 100-200.
select *
  from (select * from
  (
  select rownum+100 l
  from dual
  connect by level < (200-100)
  ) order by dbms_random.random)
  where rownum <= 10;
Но..
1.С увеличением интервала линейно падает производительность и уже на 10млн в моей среде - это минута.
2. Уникальные НЕ только целые.. как? ..скажем от 0.00 до 999999.99

Другой вариант, более быстрый:
select d unique_num from (
select distinct trunc(dbms_random.VALUE(1,1000000),2) d from dual
  CONNECT BY LEVEL <= 1000
  order by dbms_random.random
)
where rownum<=10
Но..
1. Нужно следить за пропорцией нужного количества результирующих к интервалу и при необходимости увеличивать "CONNECT BY LEVEL <= 1000" (напр. получить 19 уникальных целых из 20 , нужно увеличить его хотябы на порядок). Не гарантированно

 

Новый комментарий

Я не спамер: введите суму 2+9



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Печь булерьян в дом
21 сентября, 1 ответа
Как Открыть Футбольную Школу
20 сентября, 1 ответа
IP телефония
20 сентября, 1 ответа