先看示例代码:

  1. with temp as(
  2. select 'China' nation ,'Guangzhou' city from dual union all
  3. select 'China' nation ,'Shanghai' city from dual union all
  4. select 'China' nation ,'Beijing' city from dual union all
  5. select 'USA' nation ,'New York' city from dual union all
  6. select 'USA' nation ,'Bostom' city from dual union all
  7. select 'Japan' nation ,'Tokyo' city from dual
  8. )
  9. select nation,listagg(city,',') within GROUP (order by city)
  10. from temp
  11. group by nation

这是最基础的用法:

LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)

用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。

非常方便。

同样是聚合函数,还有一个高级用法:

就是over(partition by XXX)

也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:

  1. with temp as(
  2. select 500 population, 'China' nation ,'Guangzhou' city from dual union all
  3. select 1500 population, 'China' nation ,'Shanghai' city from dual union all
  4. select 500 population, 'China' nation ,'Beijing' city from dual union all
  5. select 1000 population, 'USA' nation ,'New York' city from dual union all
  6. select 500 population, 'USA' nation ,'Bostom' city from dual union all
  7. select 500 population, 'Japan' nation ,'Tokyo' city from dual
  8. )
  9. select population,
  10. nation,
  11. city,
  12. listagg(city,',') within GROUP (order by city) over (partition by nation) rank
  13. from temp

总结:LISTAGG()把它当作SUM()函数来使用就可以了。

转:Oracle的列转行函数:LISTAGG()的更多相关文章

  1. oracle 的列转行函数 listagg()

    当你的表X中有A,B两列,数据如下 A B a 1 a 2 a 3 b 1 b 2 b 3 想让数据以 a|1|2|3 , b|1|2|3 格式显示可使用listagg() 1.使用listagg() ...

  2. Oracle列转行函数LISTAGG()

    --Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'Chi ...

  3. Oracle列转行函数Listagg以及pivot查询示例

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

  4. Oracle 列转行函数 Listagg()

    这是最基础的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 例: select listagg(oeid,',') within GROUP (ord ...

  5. Oracle列转行函数使用

    一.业务场景 今天需要实现一个table,有一列的效果是:用户姓名A(账号a),用户姓名B(账号b)...这种格式.这就想到oracle的列转行函数vm_concat. 可以用类似这种格式wm_con ...

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

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

  7. oracle中行转列、列转行函数

    多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...

  8. oracle列转行 WM_CONCAT LISTAGG

    开发给个SQL说给某个条件时报ORA-22922 代码段: SELECT 袋号, SUM(实际重量) AS 实际重量, SUM(材积重量) AS 材积重量, COUNT(运单号) AS 件数, TO_ ...

  9. Oracle wm_concat(列转行函数)实际使用

    接触到了一个开发需求.其中是要把NC单据表体行的字段拼成一个字符串.例如: id name work age 1 王一 搬运工 20 2 李二 清洁工 21 3 张三 洗脚工 22 出现结果字符串为: ...

随机推荐

  1. metasploit篇

    第一部分:基本使用 1.在kali中metasploit默认使用postgresql作为它的数据库: /etc/init.d/postgresql start 开机自启:update-rc.d pos ...

  2. Pwn-level1

    题目地址 https://dn.jarvisoj.com/challengefiles/level1.80eacdcd51aca92af7749d96efad7fb5 先看一下文件的类型和保护机制   ...

  3. 剑指Offer-2.替换空格(C++/Java)

    题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 题意明确,就是将一个字符 ...

  4. Python thread (线程)

    线程 (thread) 操作系统最小的调度单位,是一串指令的集合 程序一开始就有一个主线程,新启动的线程和主线程之间互不影响,主线程启动子线程之后就相互独立(子线程也可以启动线程),无论子线程是否执行 ...

  5. 小白专场-是否同一颗二叉搜索树-c语言实现

    目录 一.题意理解 二.求解思路 三.搜索树表示 程序框架搭建 3.1 如何建搜索树 3.2 如何判别 3.3 清空树 更新.更全的<数据结构与算法>的更新网站,更有python.go.人 ...

  6. TCP的三次握手与四次挥手理解

    本文经过借鉴书籍资料.他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后 ...

  7. JS分类选择插件

    需要做一个选择分类工具,大致要求如下: 点击按钮,显示一级分类,指向某个一级分类显示对应二级分类,分类有几层不定. 只能选择最后一个分类,然后把分类的ID 传值给按钮的value 我的思路: 1.后台 ...

  8. 《一起学mysql》3

    索引和查询优化   为什么要索引? 想想我们上小学的时候是怎么查字典的,比方查 理想的 “理”,首先在索引里找到声母 “l”,再找到 “li” 找到 “li”所在的页数,   我们之前建的所有mysq ...

  9. undefined reference的一种case

    undefined reference是经常遇到的链接错误,一般是函数未定义或未正确链接引起的问题: but 有一种case,比较坑... c++ 调用 c 的函数,当c函数未加:extern “C” ...

  10. 云原生生态周报 Vol. 12 | K8s 1.16 API 重大变更

    本文作者:源三.临石.张磊.莫源 业界要闻 1. K8s 1.16 将废弃一系列旧的 API 版本 影响面涉及 NetworkPolicy.PodSecurityPolicy.DaemonSet, D ...