前言:最近在写一些比较复杂的SQL,是一些统计分析类的,动不动就三四百行,也是首次写那么长的SQL,有用到一些奇形怪状的SQL函数,在这里结合网上的例子做一些笔记,以后用到不记得用法可以翻出来看!

1.基础用法:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX),就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来

LISTAGG()其实可以把它当作SUM()函数来使用或者理解

(1)示例代码:

WITH TEMP AS(
SELECT 'CHINA' NATION ,'GUANGZHOU' CITY FROM DUAL UNION ALL
SELECT 'CHINA' NATION ,'SHANGHAI' CITY FROM DUAL UNION ALL
SELECT 'CHINA' NATION ,'BEIJING' CITY FROM DUAL UNION ALL
SELECT 'USA' NATION ,'NEW YORK' CITY FROM DUAL UNION ALL
SELECT 'USA' NATION ,'BOSTOM' CITY FROM DUAL UNION ALL
SELECT 'JAPAN' NATION ,'TOKYO' CITY FROM DUAL
)
SELECT
NATION,LISTAGG(CITY,',') WITHIN GROUP (ORDER BY CITY)  AS CITIES
FROM TEMP
GROUP BY NATION

运行结果:

(2)示例代码:

查询部门为20的员工列表:SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20';

运行结果:

使用  listagg() WITHIN GROUP ()  将多行合并成一行:

SELECT
T .DEPTNO,
LISTAGG (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) NAMES
FROM SCOTT.EMP T
WHERE
T .DEPTNO = '20' GROUP BY T .DEPTNO

运行结果:

2.高级用法:over(partition by XXX)。在不使用Group by语句时候,也可以使用LISTAGG函数:

WITH TEMP AS(
SELECT 500 POPULATION, 'CHINA' NATION ,'GUANGZHOU' CITY FROM DUAL UNION ALL
SELECT 1500 POPULATION, 'CHINA' NATION ,'SHANGHAI' CITY FROM DUAL UNION ALL
SELECT 500 POPULATION, 'CHINA' NATION ,'BEIJING' CITY FROM DUAL UNION ALL
SELECT 1000 POPULATION, 'USA' NATION ,'NEW YORK' CITY FROM DUAL UNION ALL
SELECT 500 POPULATION, 'USA' NATION ,'BOSTOM' CITY FROM DUAL UNION ALL
SELECT 500 POPULATION, 'JAPAN' NATION ,'TOKYO' CITY FROM DUAL
)
SELECT POPULATION,
NATION,
CITY,
LISTAGG(CITY,',') WITHIN GROUP (ORDER BY CITY) OVER (PARTITION BY NATION) RANK
FROM TEMP

运行结果:

Oracle列转行函数LISTAGG() WITHIN GROUP ()的使用方法相关推荐

  1. Oracle 列转行函数 Listagg()

    本文来源于:dacoolbaby 的   <Oracle 列转行函数 Listagg()> 这是一个Oracle的列转行函数:LISTAGG() 1 with temp as( 2 sel ...

  2. oracle列转行查询,Oracle列转行函数Listagg以及pivot查询示例

    简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...

  3. Oracle列转行函数 Listagg()详解

    详解 listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩.致密化(data densification) 基本用法 像聚合函数一样,通过Group by语句,把每个Group的一 ...

  4. Oracle列转行函数listagg和wm_concat

    listagg函数 其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接. //用法如下 分隔符号可以自定义 listagg (字段, ',') WITHIN GROU ...

  5. oracle列转行函数listagg和vm_concat

    wm_concat 和listagg 函数都可以实现对(单个或组合)列的合并,也可以看成是对某一列的"SUM",这俩个函数功能相同,listagg是在11.2的版本中才首次出现的, ...

  6. oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案

    业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...

  7. oracle数据列转行排序,oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理

    业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: 需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是: var data = [ { name : '产品1', v ...

  8. oracle pivot 列转行,Oracle 列转行函数pivot

    作为数据库应用开发人员,我们有很大的精力应付在处理各种各样的数据类型,展现各种维度的报表上面. [url=]行转列[/url].列转行是我们经常会遇到的"诡异"需求.标准SQL没有 ...

  9. oracle列转行 listagg

    oracle 列转行listagg实现方式 当结果中只有要转化的那一列时候 select listagg(t.shopName, ',') within group(order by t.idCno) ...

最新文章

  1. linux centos 丢失 grub.conf 启动系统
  2. java static变量销毁_JAVA里static 变量在程序执行结束后是否被消毁
  3. 使用Eclipse PDT + Xampp搭建Php开发环境
  4. java 数组 push pop_JavaScript学习笔记:数组的push()、pop()、shift()和unshift()方法
  5. PHP7+Swoole/Nginx/Golang性能对比
  6. 复盘阿里城市大脑这3年
  7. Java volatile关键字
  8. 电脑开启上帝模式,300多个系统功能都在这里!
  9. android studio:aar文件出现问号,导入不生效解决
  10. 【java】窗口控件及字符串和异常的综合应用
  11. 我的天!!线上千万级大表排序,如何优化?
  12. 上拉加载下拉刷新控件WaterRefreshLoadMoreView
  13. 三调数据库标注插件v1.2
  14. 「js基础」JavaScript入门,难不难你来说
  15. 一文告诉你大数据是什么
  16. OO ALV中的data_changed、data_changed_finished事件介绍
  17. System.gc()介绍
  18. 通信端口感叹号_解决通用串行总线控制器总是有感叹号的办法
  19. 不会英语自学php要多久,一个人自学英语要多久 自学英语的方法
  20. c语言dowhile编程题,do while循环问题

热门文章

  1. 从 X 入门Pytorch——环境安装建议,Tensor多种构造方式,Tensor的基本操作
  2. 2023官方发布最新SpringMVC
  3. 2019 NCTF Re WP
  4. 在计算机使用过程中内存出现,电脑在使用过程中提示电脑内存不足怎么办?
  5. 删除PPT所有页面中同一个位置的图片
  6. C# 状态机 Stateless 3.0
  7. 鸿蒙os手机操作设置,华为鸿蒙HarmonyOS手机应用快速入门(一)开发环境搭建
  8. Java 读取 modbus slave模拟器数据 示例
  9. 高通艾和志:魏牌、毫末和高通是业内最强组合
  10. Spring AOP基础组件 Joinpoint