当前位置: 首页 > news >正文

LISTAGG 函数

# LISTAGG 函数

对于查询中的每个组,LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序,然后将值串联成一个字符串。

## 语法:

```sql
LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ]   
```

## 参数:
DISTINCT:
(可选) 用于在串联之前消除指定表达式中重复值的子句。尾部空格将被忽略,因此会将字符串 'a' 和 'a ' 视为重复值。LISTAGG 将使用遇到的第一个值。
aggregate_expression:
提供要聚合的值的任何有效表达式(如列名称)。忽略 NULL 值和空字符串。
delimiter分隔符:
(可选) 用于分隔串联的值的字符串常数。默认值为 NULL。
WITHIN GROUP (ORDER BY order_list):
(可选) 用于指定聚合值的排序顺序的子句。
```

## 返回值

```sql
VARCHAR(MAX)。如果结果集大于最大 VARCHAR 大小(64K – 1 或 65535),则 LISTAGG 返回以下错误:
Invalid operation: Result size exceeds LISTAGG limit
```

## 使用说明

```sql
如果语句包含多个使用 WITHIN GROUP 子句的 LISTAGG 函数,则每个 WITHIN GROUP 子句必须使用相同的 ORDER BY 值。(在oracle中可以使用不同的order by值)
oracle中使用WITHIN GROUP 子句可以使用不同的 ORDER BY 值:
SQL> select listagg(ENAME)
  2  within group (order by MGR) as e_name,
  3  listagg(SAL)
  4  within group (order by JOB) as sal_all
  5  from emp;

E_NAME
--------------------------------------------------------------------------------
SAL_ALL
--------------------------------------------------------------------------------
FORDSCOTTALLENJAMESMARTINTURNERWARDMILLERADAMSBLAKECLARKJONESSMITHKING东方东方
300030001100130080095024502850297550001250125015001600
oracle中使用WITHIN GROUP 子句使用相同的 ORDER BY 值:
SQL> select listagg(ENAME)
  2  within group (order by MGR) as e_name,
  3  listagg(HIREDATE)
  4  within group (order by MGR) as e_date
  5  from emp;

E_NAME
--------------------------------------------------------------------------------
E_DATE
--------------------------------------------------------------------------------
FORDSCOTTALLENJAMESMARTINTURNERWARDMILLERADAMSBLAKECLARKJONESSMITHKING东方东方
03-12月-8119-4月 -8703-12月-8108-9月 -8120-2月 -8122-2月 -8128-9月 -8123-1月 -82
23-5月 -8701-5月 -8102-4月 -8109-6月 -8117-12月-8017-11月-8126-11月-20
--在oracle中不能缺少within子句
SQL> select listagg(ENAME)
  2  within group (order by MGR) as e_name,
  3  listagg(HIREDATE)  as e_date
  4  from emp;
listagg(HIREDATE)  as e_date
                   *
第 3 行出现错误:
ORA-02000: 缺失 WITHIN 关键字
示例
以下示例聚合按照部门分组聚合公司员工名称(名称按照,分隔)
SQL> select listagg(ENAME,',')
  2  within group (order by MGR) as e_name
  3  from emp;

E_NAME
--------------------------------------------------------------------------------
FORD,SCOTT,ALLEN,JAMES,MARTIN,TURNER,WARD,MILLER,ADAMS,BLAKE,CLARK,JONES,SMITH,K
ING,东方不败,独孤求败
```


 

http://www.lryc.cn/news/204821.html

相关文章:

  • 485modbus转profinet网关连三菱变频器modbus通讯配置案例
  • 1024节日
  • 【@EnableWebMvc的原理】
  • css3 2d转换transform详细解析与代码实例transform
  • 点亮现代编程语言的男人——C语言/UNIX之父Dennis Ritchie
  • 找不到msvcp100.dll解决教程
  • 萃取和constexpr
  • 决策树完成图片分类任务
  • Docker 容器全部停止命令
  • 对GRUB和initramfs的小探究
  • springboo单机多线程高并发防止重复消费的redis方案
  • Java架构师内功数据库
  • 踩着节日的小尾巴
  • UG\NX二次开发 设置视图中心 UF_VIEW_set_center
  • leetcode做题笔记201. 数字范围按位与
  • 游戏盾如何有效防护DDoS
  • JavaScript中的类型转换
  • 01-JVM 内存结构
  • 树与二叉树(考研版)
  • 前端车牌键盘组件
  • 什么是脚本文件,脚本的执行,脚本格式等
  • react 实战- 玩转 react 全家桶(进阶)学习
  • 【Python】取火柴小游戏(八什博弈)
  • 【Redis安装】Ubuntu和Centos
  • 【Java】ArrayList集合使用
  • 【proteus】8086仿真/汇编:创建项目并添加汇编代码文件
  • 如何给Github上的开源项目提交PR?
  • 【Java】小计 TCP UDP的区别
  • Day 1 Vue 页面框架
  • ChatGPT课件汇总介绍