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 ...
随机推荐
- Linux int型转换为char*型几种方法总结
一 前记 这种转换,windows下最常用就是atoi()函数.可惜的是,在Linux中没有itoa()函数,只有atoi() 这点很有趣,居然不对称. 所以在Linux中实现从整型到char*的 ...
- jquery之ajax中文乱码解决方案
$.ajax({ dataType : 'json',type : 'POST',url : 'http://localhost/test/test.do',data : {id: 1, type: ...
- Git进阶命令-reset
之前有关Git,写过一片文章: Git五个常见问题及解决方法 一.reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决 ...
- 编译OpenWRT-for-MT7620A(带8021x验证)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- [C++]使用auto遍历判断是否是最后一个元素
一.背景 略 二.代码 for(auto& it:vec){ if(&it==&vec.back()){ cout<<"is the last eleme ...
- 记录--使用 JS 实现基本的截图功能
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 思路分析 在开始动手之前,分析一下整个功能的实现过程: 根据图片大小创建 canvas1 画布,并将原图片直接定位在 canvas1 上: ...
- FreeRTOS教程10 低功耗
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...
- KingbaseES V8R3集群运维案例---进程内核参数配置集群启动故障
案例说明: KingbaseES V8R3集群在部署时需要配置与进程间通讯(IPC)相关的内核参数,如果缺失配置或配置错误,kingbasecluster服务在启动过程中将因为内核参数配置错误导致启动 ...
- Java,substring( )方法
该方法可以获取一个String字符串的(x,y)个字符. 其中x和y是左闭右开的,左边的可以取到,右边的取不到,并且索引从0开始. 例如 1 String text = "reliableY ...
- Delving into Sample Loss Curve to Embrace Noisy and Imbalanced Data
这篇论文: 提出了prob-and-allocate训练策略,在prob阶段获得样本损失,在allocate阶段分配样本权重. 以[2]的meta-weight-net为Baseline,取名为Cur ...