Oracle listagg函数和start with connect by子句

加油,新时代打工人!

以下在学习Oracle数据的记录过程,以及遇到的问题。
一、 【详细】 Oracle Database 19c 安装步骤
二、 Oracle基础入门语句
三、【详细】Oracle单行函数和多行函数
四、【详细】Oracle中的视图、索引、PL/SQL语言、游标
五、【详细】Oracle帮助文档下载和使用
六、【详细】Oracle存储过程和存储函数以及触发器的使用
七、【亲测】Java调用Oracle存储过程和存储函数

Oracle listagg函数和start with connect by子句

listagg

listagg(measure_expr,delimiter) within group ( order by order_by_clause);

解释:measure_expr可以是基于任何列的表达式

delimiter分隔符,默认为NULL

order_by_clause决定了列值的拼接顺序

举例

普通函数,对工资进行排序,并按照逗号进行拼接

SQL> select listagg(ename,',')within group(order by sal)name from emp;

NAME
----------------------------------------------------------------------------------------------------
SMITH,JAMES,ADAMS,MARTIN,WARD,MILLER,TURNER,ALLEN,CLARK,BLAKE,JONES,FORD,SCOTT,KING

分组函数

SQL> select deptno,listagg(ename,',')within group(order by sal)name from emp group by deptno;

    DEPTNO NAME
---------- -------------------------------------------------------------------------------------------------
    10 MILLER,CLARK,KING
    20 SMITH,ADAMS,JONES,FORD,SCOTT
    30 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE

start with connect by 子句

connect by 是结构化查询中用到的,其基本语法是:

1 selectfrom tablename
2 start with 条件1
3 connect by 条件2
4 where 条件3;

举例

select * from test
20   2       start with day_number=1
21   3       connect by  prior day_number=day_number-1 and prior msisdn= msisdn

上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.

start with connect by 语法结构
如上面说看到的例子,其语法结构为start with condition connect by condition (含 prior 关键字)
start with conditon 给出的seed 数据的范围, connect by 后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。在下面的这个start with connect by 结构中,就表示查找出了从1开始,父数据的day_number等于子数据的day_number-1而且父数据的msisdn=子数据的msisdn.

start with day_number=1 

connect by prior day_number=day_number-1 and prior msisdn= msisdn
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值