Конвертировать sql запросы postgres в оракул - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь ускорить запрос случайного выбора в Oracle и нашел этот блог .Я не могу преобразовать их следующие запросы Postgres в oracle:

    select * from users
      where 
        random() < 200 / (select count(1) from logs)::float
      order by random()
      limit 100;

и

   select * from users
     where id in (
       select round(random() * 21e6)::integer as id
       from generate_series(1, 110)
       group by id -- Discard duplicates
       )
     limit 100;

Как бы эти запросы выглядели в oracle?

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете использовать такие запросы:

 select * from 
 (
 select u.*, row_number() over (order by dbms_random.value) as rn 
   from users u
  where 
    dbms_random.value < 200 / (select count(1) from logs)
  )
  where rn <= 100;

и

select * from
(
select u.*, row_number() over (order by 1) as rn
  from users u
 where id in (
              select round(dbms_random.value * 21e6) as id                    
                from dual
             connect by level <= 110  
             )
 )
 where rn <= 100;

Если версия вашей БД Oracle - 12c, вы можете заменить where rn <= 100 детали на fetch first 100 rows only и удалить столбцы rn (которые состоят из row_number() function) в подзапросах.

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