注:Oracle 的 LiveSQL 站点已经升级到 19c 版本,可以通过该网站来测试 19c 的新特性。

在Oracle 19c中,一个新的函数 ANY_VALUE 被引入进来,这个函数的作用是基于ORDER BY定义返回每个组中的任何值,通过这一个函数,可以消除将每个列都指定为GROUP BY子句的一部分的必要性。

看一个示例。

select d.deptno,d.dname,sum(e.sal)

from scott.dept d,scott.emp e

where e.deptno = d.deptno group by d.deptno,d.dname

Result Set 13

DEPTNO DNAME SUM(E.SAL)
10 ACCOUNTING 8750
20 RESEARCH 10875
30 SALES 9400

在有了 ANY_VALUE 之后,Group By之后就不再需要增加冗余的字段,SQL 再次变得优雅:

select d.deptno,any_value(d.dname) as DEPTNAME,sum(e.sal)

from scott.dept d,scott.emp e

where e.deptno = d.deptno group by d.deptno

ANY_VALUE 也可以作为类似 MAX/MIN 的窗口函数发挥作用。

Listagg 是 Oracle 11.2 中新增的函数,对于指定的度量,LISTAGG对ORDER BY子句中指定的每个组内的数据进行排序,然后连接度量列的值。

  • 作为单集聚合函数,LISTAGG对所有行进行操作并返回单个输出行。

  • 作为一个组集聚合,该函数对GROUP BY子句定义的每个组进行操作并返回一个输出行。

  • 作为分析函数,LISTAGG根据query_partition_clause中的一个或多个表达式将查询结果集划分为组。

由于具有灵活的数据操作性,LISTAGG函数是行列转换的首选。以下是一个简单的示例:

SELECT deptno,

LISTAGG(ename, ',') WITHIN GROUP(ORDER BY ename) AS employees

FROM scott.emp GROUP BY deptno;

DEPTNO EMPLOYEES
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

大家可以在 livesql.oracle.com 网站体验 19c 的新特性:

在19c之前,Listagg 函数不能对转换的结果去重,如果你希望计算结果不包含重复值,则还需要进行一次嵌套处理。如下是常见的带有重复值计算输出:

select d.dname,

listagg (e.job,', ')

within group (order by e.job) jobs

from scott.dept d, scott.emp e

where d.deptno = e.deptno

group by d.dname

DNAME JOBS
ACCOUNTING CLERK, MANAGER, PRESIDENT
RESEARCH ANALYST, ANALYST, CLERK, CLERK, MANAGER
SALES CLERK, MANAGER, SALESMAN, SALESMAN, SALESMAN, SALESMAN

在Oracle 19c中,这个函数向前迈进了一小步,支持 Distinct 关键字,可以通过加入这个关键字直接去除重复值,SQL 又向优雅迈进了一小步:

select d.dname,

listagg (DISTINCT e.job,', ')

within group (order by e.job) jobs

from scott.dept d, scott.emp e

where d.deptno = e.deptno

group by d.dname

DNAME JOBS
ACCOUNTING CLERK, MANAGER, PRESIDENT
RESEARCH ANALYST, CLERK, MANAGER
SALES CLERK, MANAGER, SALESMAN

在19c 中,Oracle 还对位运算进行了增强,增加了一系列的位运算函数,通过位运算,避免一些排序操作,可以实现对于性能的巨大提升。

例如,如下案例,通过物化视图的自动改写,可以实现显著的性能提升。

希望提前体验19c 的同学们可以去 livesql.oracle.com 进行测试,19c 马上到来,抓紧时间学习吧!


资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2018DTC,2018 DTC 大会 PPT

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2018OOW ,Oracle OpenWorld 资料

学习交流

Oracle 19c 新特性:ANY_VALUE 函数和 LISTAGG 的增强相关推荐

  1. oracle dataguard详解,Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向

    Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向 在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强, ...

  2. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML

    Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML Oracle 19c 新特性之一,adg的自动 dml 重定向.就是在 ADG 环境下,连接到 ...

  3. 快讯:Oracle 19c 新特性及官方文档抢鲜下载

    随着2月的春风吹拂,Oracle 19c 的第一个 Exadata 版本发布将马上发布出来,等待可测试版本的朋友们马上即可如愿了. 目前官方文档已经可以公开下载到,我为大家整理了一些重要文档,包括概念 ...

  4. Oracle 19c 新特性:ADG的自动DML重定向增强读写分离

    在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强,就是ADG的自动DML转发: 这个新特性的功能是:将偶然发送到ADG上的DML操作 ...

  5. Oracle 19c 新特性 —— 自动索引 Automatic indexing

    自动索引功能可自动执行Oracle数据库中的索引管理任务.根据应用程序工作负载的变化自动创建.重建和删除数据库中的索引,从而提高数据库性能. Automatic indexing特性对于on-prem ...

  6. Oracle 19c 新特性:自动化索引 Automatic indexing 实践

    老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...

  7. Oracle 19C新特性测试之滚动升级

    从Oracle的12.1或12.2版本升级到最新的19c版本,目前可供选择的几种升级方案有: 1.插拔式升级,通用性好,属于数据迁移式的升级方式,不能整库进行升级,数据量越大耗时越长,业务中断时间长. ...

  8. Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验

    老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...

  9. Oracle 19c 新特性 —— 混合分区表Hybrid partitioned tables

    简介 从19c开始,Oracle数据库支持Hybrid partitioned tables,也就是混合分区表,进一步扩展了Oracle分区技术.这里的混合指的是数据的分布,分区表的分区可以一些位于数 ...

  10. Oracle 19c 新特性:Schema Only Account详解

    点击▲关注 "数据和云"   给公众号标星置顶 更多精彩 第一时间直达 老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门, ...

最新文章

  1. 维护局域网,让更给力,教你如何去维护局域网
  2. php rabbmq教程_RabbitMQ+PHP 教程六(RPC)
  3. 明天是我的生日,写给24岁的自己
  4. Redis工具类封装讲解和实战
  5. itext设置pdf的尺寸_如何获取pdf文档iText 7的页面大小-问答-阿里云开发者社区-阿里云...
  6. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
  7. IP 层收发报文简要剖析4--ip 报文发送
  8. 084 HBase的数据迁移(含HDFS的数据迁移)
  9. 基于android的高仿抖音,Android仿抖音列表效果
  10. Avalanche发布AvalancheGo v1.2.3版本
  11. 严重: Servlet.service() for servlet [taotao-manager] in context with path [] threw exception [Request
  12. python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
  13. RC串联延时电路电容充电时间计算
  14. 蜜桃为什么显示服务器不可用,蜜桃直播 服务器地址
  15. 穿膜肽TAT修饰载荧光探针香豆素-6脂质体
  16. 2022江苏省安全员A证考题及答案
  17. android开发界面转换,Android开发Activity界面切换添加动画特效的方法
  18. xp系统 自动锁定计算机,xp如何设置锁屏时间
  19. 用Python将excel表格按照列拆分为多个表格
  20. Android 几个ApplicationInfo Info系列类的总结

热门文章

  1. 新建文本文档出现错误怎么办
  2. 网络安全系列-三十四: EDR、NDR、XDR 、HIPS、NIPS、NTA、DPI、DFI、南北流量、东西流量:傻傻分不清楚
  3. 赖世雄老师---名词性从句
  4. pacman 查询_archlinux pacman常用命令
  5. 物理地址是怎么确定的?以8086为例
  6. html中span标签的详细介绍
  7. iOS 解决TableView reloadData时cell中图片会闪的问题
  8. linux libssl.so.6,centos6 安装directadmin出现libssl.so.6找不到问题
  9. MAE源代码理解 part2 : 预训练调试
  10. Maven 部署私服依赖