sql - 将 postgres sql 查询转换为 oracle
问题描述
我正在尝试加快 Oracle 中的随机选择查询并找到此博客。我无法在 oracle 中转换他们的以下 Postgres 查询:
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 中会是什么样子?
解决方案
您可以使用这样的查询:
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 DB 版本是 12c,您可以在子查询中使用和删除(由function 组成)列 替换where rn <= 100
部分。fetch first 100 rows only
rn
row_number()
推荐阅读
- python - 从另一个 csv 文件 grouby 列填充 csv 文件
- javascript - 如何修复“加载资源失败:操作无法完成。iOS 12 视频中的“协议错误”?
- mysql - MySQL Query 跨越 40,000 行 v/s 一次加载和 for 循环
- karate - 如何在空手道中上传多个包含多部分的文件
- python - 如何编写 Django 查询并在 WHERE 子句中包含 PostGres 函数 (current_time)?
- ios - 适用于 Unity 的 iOS 插件,带有导航以添加新联系人
- swift - 我的代码无法在 iPhone 上运行“退出代码 1 失败”错误消息
- r - 如何根据另一个单选按钮输入将单选按钮插入闪亮的 UI?
- git - 为什么 PowerShell 似乎不支持 $env:path 变量?
- java - 如何使 Vertx MongoClient 操作同步但不阻塞 Java 中的事件循环?