oracle的listagg函数_oracle的listagg函数

oracle的listagg函数_oracle的listagg函数Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下:1,版本SQL>select*fromv$version;BANNER——————————————————————————–OracleDatabase11gEnterpris

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下:




1,版本


SQL> select * from v$version;




BANNER


——————————————————————————–


Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production


PL/SQL Release 11.2.0.1.0 – Production


CORE 11.2.0.1.0 Production


TNS for Linux: Version 11.2.0.1.0 – Production


NLSRTL Version 11.2.0.1.0 – Production




2,测试数据


SQL> 


SQL> select empno,ename,deptno from scott.emp;




EMPNO ENAME DEPTNO


—– ———- ——


7369 SMITH 20


7499 ALLEN 30


7521 WARD 30


7566 JONES 20


7654 MARTIN 30


7698 BLAKE 30


7782 CLARK 10


7788 SCOTT 20


7839 KING 10


7844 TURNER 30


7876 ADAMS 20


7900 JAMES 30


7902 FORD 20


7934 MILLER 10




14 rows selected




3,作为聚集函数


SQL> SELECT deptno,


2 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY ename) AS employees


3 FROM scott.emp


4 GROUP BY deptno;




DEPTNO EMPLOYEES


—— ——————————————————————————–


10 CLARK,KING,MILLER


20 ADAMS,FORD,JONES,SCOTT,SMITH


30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD




SQL> 


–更换排序列


SQL> SELECT deptno,


2 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY hiredate) AS employees


3 FROM scott.emp


4 GROUP BY deptno;




DEPTNO EMPLOYEES


—— ——————————————————————————–


10 CLARK,KING,MILLER


20 SMITH,JONES,FORD,SCOTT,ADAMS


30 ALLEN,WARD,BLAKE,TURNER,MARTIN,JAMES


–order by必须存在


SQL> SELECT deptno,


2 LISTAGG(ename, ‘,’) WITHIN GROUP() AS employees


3 FROM scott.emp


4 GROUP BY deptno;




SELECT deptno,


LISTAGG(ename, ‘,’) WITHIN GROUP() AS employees


FROM scott.emp


GROUP BY deptno




ORA-30491: ORDER BY 子句缺失




SQL> SELECT deptno,


2 LISTAGG(ename, ‘,’) WITHIN GROUP(order by null) AS employees


3 FROM scott.emp


4 GROUP BY deptno;




DEPTNO EMPLOYEES


—— ——————————————————————————–


10 CLARK,KING,MILLER


20 ADAMS,FORD,JONES,SCOTT,SMITH


30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


==〉按字母顺序排列


4,LISTAGG作为分析函数使用


SQL> SELECT empno,


2 ename,


3 deptno,


4 LISTAGG(ename, ‘,’) WITHIN GROUP(ORDER BY ename) over(partition by deptno) AS employees


5 FROM scott.emp;




EMPNO ENAME DEPTNO EMPLOYEES


—– ———- —— ——————————————————————————–


7782 CLARK 10 CLARK,KING,MILLER


7839 KING 10 CLARK,KING,MILLER


7934 MILLER 10 CLARK,KING,MILLER


7876 ADAMS 20 ADAMS,FORD,JONES,SCOTT,SMITH


7902 FORD 20 ADAMS,FORD,JONES,SCOTT,SMITH


7566 JONES 20 ADAMS,FORD,JONES,SCOTT,SMITH


7788 SCOTT 20 ADAMS,FORD,JONES,SCOTT,SMITH


7369 SMITH 20 ADAMS,FORD,JONES,SCOTT,SMITH


7499 ALLEN 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


7698 BLAKE 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


7900 JAMES 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


7654 MARTIN 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


7844 TURNER 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD


7521 WARD 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD




14 rows selected


5,其他实现方法参考


–model


SQL> SELECT deptno, vals


2 FROM (SELECT deptno, RTRIM(vals, ‘,’) AS vals, rn


3 FROM scott.emp MODEL PARTITION BY(deptno) DIMENSION BY(ROW_NUMBER() OVER(PARTITION BY deptno ORDER BY ename) AS rn) MEASURES(CAST(ename AS VARCHAR2(4000)) AS vals) RULES(vals [ ANY ] ORDER BY rn DESC = vals [ CV() ] || ‘,’ || vals [ CV() + 1 ]))


4 WHERE rn = 1


5 ORDER BY deptno;




DEPTNO VALS


———- ——————————————————————————–


10 CLARK,KING,MILLER


20 ADAMS,FORD,JONES,SCOTT,SMITH


30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD




–表函数:WMSYS.WM_CONCAT,10G已经提供该函数


SQL> 


SQL> SELECT deptno, WMSYS.WM_CONCAT(ename) AS vals –<– WM_CONCAT ~= STRAGG


2 FROM scott.emp


3 GROUP BY deptno;




DEPTNO VALS


—— ——————————————————————————–


10 CLARK,MILLER,KING


20 SMITH,FORD,ADAMS,SCOTT,JONES


30 ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196490.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 彩色图和深度图转点云

    彩色图和深度图转点云环境:windows10、VS2013、opencv2.49、openNi、PCL1.8opencv环境搭建参考https://www.cnblogs.com/cuteshongshong/p/4057193.htmlhttps://blog.csdn.net/u013105549/article/details/50493069PCL1.8+openNi搭建参考https://blog.cs…

    2022年4月25日
    31
  • VMware虚拟机安装黑群晖7.0教程

    VMware虚拟机安装黑群晖7.0教程教程仅供参考,不当之处多多理解。该篇教程主要讲解黑群晖(DS918+)的安装Tip:本教程本教程只用于个人学习使用,有条件,长期使用的朋友推荐从正规官方渠道入手。1.首先安装VMware虚拟机双击安装文件进行安装…

    2022年7月14日
    194
  • Flume学习笔记「建议收藏」

    Flume学习笔记「建议收藏」Flume学习笔记Flume定义Flume基础架构Flume安装部署监控端口数据实时监控单个追加文件实时监控目录下多个新文件Flume定义Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单.Flume最主要的作用就是:实时读取服务器本地磁盘的数据,将数据写入到HDFS.Flume基础架构AgentAgent是一个JVM进程,它以事件的形式将数据从源头送至目的。Agent主要有3个部

    2025年6月2日
    0
  • c++枚举类型enum输出_python中的枚举

    c++枚举类型enum输出_python中的枚举enum枚举的含义?enum枚举的声明?enum枚举的特点?enum枚举的作用?enum枚举的注意事项?

    2022年9月8日
    0
  • 再说注解

    再说注解

    2021年12月16日
    49
  • Linux删除软链接

    Linux删除软链接首先我们先来创建一个文件#mkdirtest_chk#touchtest_chk/test.txt#vimtest_chk/test.txt(这一步随便在这个test.txt里写点东东即可)下面我们来创建test_chk上当的软链接#ln-stest_chktest_chk_ln软链接创建好了,我们来看看怎么删除它正确的删除方式(删除软链接,

    2022年6月18日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号