Oracle with的重复使用(递归)
Oracle with的重复使用(递归)
写力扣的时候学到了新的方法 Recursive WITH Clauses
通常来说如果直接使用with XXX as ()这种,是没发直接使用自身的数据的
例如
/* Write your PL/SQL query statement below */
with maina as (
select distinct p.post_id,k.topic_id
from Posts p left join Keywords k
on
instr(lower(' '||p.content||' '), lower(' '||k.word||' ')) > 0 order by p.post_id,k.topic_id
),
mainb as (
select b.post_id,listagg(nvl(b.topic_id,'999'),',') within group(order by b.topic_id) as list from maina b group by b.post_id
)
select c.post_id,decode(c.list,'999','Ambiguous!',c.list) as topic from mainb c
但是如果将格式换成 with table_name(XX,XX,XX,XX,XX) as ()
就可以在with的代码段中直接调用自己的结果,效果和常用的递归手段,如CONNECT_BY_ROOT是差不多的,比connect by prior多分层
例如(直接用别人的sql了)
with bus_store(bus_id,capacity,cnt,arrival_time,rn) as (
select c.*
from
(
select bus_id, capacity, count(b.passenger_id) cnt,a.arrival_time,
row_number() over(order by a.arrival_time) rn
from
(
select bus_id,capacity,arrival_time
from Buses
) a left join Passengers b
on(b.arrival_time<=a.arrival_time)
group by bus_id,capacity,a.arrival_time
) c
),
result(bus_id,cnt,diff,passengers_cnt,arrival_time,rn) as (
select bus_id,cnt,
case when capacity >= cnt then 0 else cnt-capacity end,
case when capacity >= cnt then cnt else capacity end,
arrival_time,rn
from bus_store
where rn=1
union all
select a.bus_id,a.cnt,
case when a.cnt - b.cnt + b.diff >= a.capacity then a.cnt - b.cnt + b.diff - a.capacity else 0 end,
case when a.cnt - b.cnt + b.diff >= a.capacity then a.capacity else a.cnt - b.cnt + b.diff end,
a.arrival_time,a.rn
from bus_store a join result b
on(a.arrival_time > b.arrival_time)
where a.rn = b.rn + 1
)
select bus_id,passengers_cnt from result order by bus_id
Oracle with的重复使用(递归)的更多相关文章
- Oracle树形结构查询(递归)
引用:https://blog.csdn.net/u012615705/article/details/78321022 文章转自上述地址,内部有稍许改动,如有需要请查看原文. oracle树状结构 ...
- mysql 实现oracle start with connect by递归
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. ...
- 【Oracle】删除重复记录
--复习autotrace: SET AUTOTRACE OFF --不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN --AUTOTRACE只显示优化器 ...
- ORACLE查询删除重复记录
比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 复制代码 代码如下: select p1.* from persons p1,pers ...
- ORACLE查询删除重复记录三种方法
本文列举了3种删除重复记录的方法,分别是rowid.group by和distinct,小伙伴们可以参考一下. 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完 ...
- [LeetCode题解]83. 删除排序链表中的重复元素 | 递归 + 迭代
方法一:递归 解题思路 通过递归法,每次判断目前头节点与给定的节点是否相等.如是,继续判断下一个节点,否则保存当前头节点,设置 next 指向下次递归得到的节点,然后返回当前节点. 代码 /** * ...
- Oracle with使用方法以及递归
数据准备 表结构 -- 部门表 CREATE TABLE DEPT ( dept_no VARCHAR2(5) NOT NULL, dept_name VARCHAR2(255) NOT NULL, ...
- oracle中统计重复几次的数据有几条
源地址:http://zhidao.baidu.com/link?url=ZgCztNzCScRI5kAqGqug1LJvf7IX311EQs6fJ0-W1kOtWaaR7MrtLoV_228Ed8F ...
- oracle删掉重复数据的语法
--查询重复数据-- ) --删掉重复数据-- ) );
- oracle中去重复记录 不用distinct
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 . select distinct name fro ...
随机推荐
- great [ɡreɪt] ɡr 然后 eɪt 单词发音 r和前面的辅音连读
great [ɡreɪt] ɡr 然后 eɪt 单词发音 r和前面的辅音连读
- 微信自动信息发送助手WMR
某信自动信息发送助手WMR 最近放假闲来无事,捣鼓了一下pyqt5,正好手上有每天定时大量群发消息的需求,正好就用pyqt5做个小应用练练手. 包含到的主要库:pyqt5.pyperclip.pyau ...
- 移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- WebView开源库终极方案
目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api ...
- WPF 模仿微信顶部断网提示气泡
直接看顶部气泡的效果吧 顶部气泡主要要做三个工作 1.定位到顶部居中 2.气泡需要跟随窗体 3.气泡不可以遮挡住其他程序界面 原生的WPF Poupu控件不会跟随目标移动且在Z轴上会置顶,所以存在打开 ...
- FPGA中的速度优化
FPGA中的速度优化 一.逻辑设计中的速度概念 逻辑设计速度相关的概念有三个:设计吞吐量.设计延时和设计时序.速度优化策略而言,吞吐量需要提高,延时应该降低,时序应该收敛(时序余量slave越大,收敛 ...
- verilog之monitor
verilog之monitor 1.函数作用 monitor用于追踪变量的变化情况,这在实际使用中还是非常实用的.电路中的某个信号的变化可以通过monitor检测,不需要使用波形图去仔细查找.也便于准 ...
- KingbaseES sys_restore 恢复表时默认不包括表上的索引
前言 最近碰到一个案例,在使用sys_restore恢复指定表时,默认不恢复表上的索引,如果想恢复需要单独指定. 测试过程 [](javascript:void(0) 查看表的有关属性:test=# ...
- NOI Linux 2.0 下载安装和使用
下载安装部分 NOI Linux 2.0发布,将于9月1日起正式启用! 首先来到 NOI 的官网,下载 .iso 格式的盘符. 然后下载任意一个虚拟机软件,这里以 VirtualBox 为例. Dow ...
- Rust 实现日志记录功能
目录 log 日志库标准 简单示例 使用方法 库的开发者 应用开发者 日志库开发者 使用 log4rs 添加依赖 配置文件 运行项目 参考文章 log 日志库标准 log 是 Rust 的日志门面库, ...