加油,新时代打工人!
以下在学习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 select … from 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