oracle中有关listagg的使用

  • 1. 作用
  • 2. 语法
  • 3. 实例
  • 问题拓展

1. 作用

可以实现行转列,将多列数据聚合为一列,实现数据的压缩。

2. 语法

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

解释:
measure_expr可以是基于任何列的表达式;
delimiter分隔符,默认为NULL;
order_by_clause决定了列值的拼接顺序。

3. 实例

1)查询部门编号20的员工

--查询部门编号20的员工,按薪资排序
select deptno,ename,sal from emp where deptno=20  order by sal;

2)普通函数
按薪资排序,结果按逗号拼接
使用listagg() WITHIN GROUP () 将多行合并成一行

--使用listagg() WITHIN GROUP ()  将多行合并成一行
select listagg(ename,',')within group(order by sal)name from emp where deptno=20;


3)分组排序
按部门分组,进行薪资求和。并列出人员清单,按薪资排序,并以,连接汇总显示

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

问题拓展

I:字段拼接过程中以0开头的小数,开头的0消失

解决方案:
加上to_char(字段,’fm9999999999999990.00’) (查看表结构设计,这里的类型是number(16,2),所以设置前面小数点前面最多16位,后面保留2位)

II:listagg聚合函数去重

使用正则替换方式去重(仅适用于oracle字符串大小比较小的情况)

regexp_replace(listagg(sfaaua001,',') within group(order by sfea002),'([^,]+)(,\\1)*(,|$)','\\1\\3') sfaaua001

参考资料:
1、文中的示例用表创建语句:https://blog.csdn.net/bananasssss/article/details/121714632?spm=1001.2014.3001.5501

oracle中有关listagg函数的使用相关推荐

  1. oracle里的listagg,oracle中的listagg函数

    listagg()用于字符串聚集 LISTAGG(XXX--要合并的列,XXX--分隔符) WITHIN GROUP( ORDER BY XXX) over(partition by XXX) 需要注 ...

  2. oracle wm_concat 替换函数,Oracle 10g无法使用listagg函数的替代解决方案[wm_concat]

    LISTAGG函数介绍 LISTAGG函数是Oracle 11.2新增的函数,用于字符串拼接,11.2之前的版本无法使用,先来简单介绍一下listagg函数的使用 LISTAGG完整语法 以上是官方文 ...

  3. oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别

    Oracle中存储过程和函数的区别 存储过程和函数:  www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...

  4. oracle substr(table),oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned]) 其中,cExpression指定要从其中返回字符串的字符表达式或备注字段: nSta ...

  5. Oracle中的单行函数

    字符串函数: 注意SUBSTR 如果向要从后向前截取,可以使用负数来表示 例如:SUBSTR('helloword',-3),表示截取最后三个字符,不写长度.默认从开始截取到字符串的末尾. 以上函数除 ...

  6. oracle取第一位,Oracle中的substr()函数和INSTR()函数

    1)substr函数格式   (俗称:字符截取函数) 格式1: substr(string string,int a,int b); 格式2:substr(string string,int a) ; ...

  7. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  8. oracle中的trim函数使用介绍

    Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的 ...

  9. oracle中如何写函数【oracle技术】

    oracle中如何写函数[oracle技术] | 浏览:1377 | 更新:2014-04-29 23:14 | 标签:oracle 在oracle数据开发中函数是必不可少的.函数可以一般是可以完成某 ...

最新文章

  1. (四)Asp.net web api中的坑-【api的返回值】
  2. MyBatis知多少(12)私有数据库
  3. mysql 暴力破解 root账号密码
  4. STL源码剖析 Stack栈 queue队列
  5. 操作系统进程调度算法图解(FCFS、轮转、SPN、SRT、HRRN、反馈)
  6. Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具
  7. 给 QtCtreator 工程文件 pro 配置 pthread库和liburcu库
  8. 寻找二值图像的连通域算法分析
  9. php如何解决高并发问题
  10. 图解内存的工作原理及时序介绍
  11. ERROR: Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurately
  12. salesforce架构_使用Salesforce扩展用户研究运营基础架构
  13. Linux基本命令 初级10个
  14. Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)
  15. 基于云的产品上线部署qqfarm
  16. qlv文件是什么?qlv文件格式介绍
  17. ddns client
  18. 把一个字符串中的大写字母和小写字母分别存储到一个新的字符串中
  19. win10安装无线显示器失败
  20. android广播 有序 无序,Android中的有序和无序广播浅析

热门文章

  1. LaTeX特殊符号表 LaTeX希腊字母 LaTeX上标 LaTeX花体 LaTeX积分 LaTeX矩阵 LaTeX大括号
  2. 产生拉普拉斯分布随机数--C语言实现
  3. 冒泡排序算法-DEMO
  4. GWAS中最少需要的SNP标记个数计算方法
  5. 螺旋无限延伸_螺旋即是无限,这些旋转楼梯惊艳到你了吗?
  6. bam文件header中的@RG
  7. CSS3实现王者荣耀匹配人员加载页面
  8. MASK RCNN 之RPN
  9. 黑马程序员JAVA基础-多线程
  10. 解决一个MFC程序的工具栏背景为黑的问题