`
郑云飞
  • 浏览: 817288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle聚合函数汇总

 
阅读更多

今天在做项目,讲mysql项目转换为oracle项目的时候,发现某些sql语句不兼容

mysql语句如下

SELECT
	COLUMN1,
	group_concat(SHOUYILV ORDER BY CRETE_DATE) AS SHOUYILV
FROM
	RCONFIGDATA
WHERE
	column2 = '1'
GROUP BY
	COLUMN1
ORDER BY
	COLUMN1

  发现上面语句在oracle下不识别group_concat函数,因此需要进行转换,转换语句如下

SELECT
	COLUMN1,listagg(SHOUYILV,',') WITHIN GROUP(ORDER BY CRETE_DATE) AS SHOUYILV
FROM
	RCONFIGDATA
WHERE
	column2 = '1'
GROUP BY
	COLUMN1
ORDER BY
	COLUMN1

 

 各个函数详解

wm_concat

该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000。随着版本的变更返回值类型可能会有改动,项目中使用时候最好在新的用户下创建一个函数。

使用方法:

select deptno,wm_concat(ename) from emp group by deptno;

排序方法(未必仅此一种写法):

select *

from (select wm_concat(ename) over(partition by deptno order by empno) val,

row_number() over(partition by deptno order by empno desc) rn,

a.*

from emp a)

where rn = 1;

如果仅是简单聚合数据,可以使用该函数,

优点:效率高。

缺点:

(1)、返回最大字符数4000;

(2)、行数据默认以逗号分隔,可以修改函数更改,但是函数一旦创建不能随意自定义分隔符;

(3)、排序实现复杂且效率低;

(4)、内部聚合混乱。比如:

select wm_concat(col1) col3,wm_concat(col2) col4 from tab;

返回的col3和col4里的聚合数据未必是一一对应的。

zh_concat

该函数是在wm_concat基础上修改返回值类型得到,可以返回clob类型数据,内部实现同wm_concat。优缺点同wm_concat。

listagg

11g新增函数,返回值varchar2,同样受4000字符数限制。但是可以排序,可以指定分隔符。

使用方法:

select deptno,listagg(ename,',') within group(order by empno) from emp group by deptno

优点:

(1)、可排序

(2)、可自定义分隔符

缺点:

(1)、仅11g之后版本可用

(2)、返回最大字符数4000

xmlagg

该方法通过将数据聚合成xml结构,再转换成varchar2或者clob类型。

使用方法:

select deptno,xmlagg(xmlparse(content ename||',' wellformed) order by empno).getstringVal() from emp group by deptno;

select deptno,xmlagg(xmlparse(content ename||',' wellformed) order by empno).getclobval() from emp group by deptno;

优点:

(1)、可排序

(2)、可返回clob类型容纳大数据量数据

(3)、可自定义分隔符

(4)、10g可用

缺点:

(1)、在不排序的情况下效率比wm_concat、zh_concat差

(2)、在排序情况下效率比listagg差

(3)、最终数据在后面或者前面会多一个分隔符,需要再做处理

sys_connect_by_path

借助connect by实现数据聚合。

实现方法:

select deptno, res

from (select rn, level, deptno, sys_connect_by_path(ename, ',') res,

connect_by_isleaf il

from (select row_number() over(partition by deptno order by empno) rn,a.*

from emp a)

start with rn = 1

connect by deptno = prior deptno

and prior rn = rn - 1)

where il = 1

该方法实现复杂,效率低下,这里不再讨论。

总结

不同场景下使用不同方法(最佳选择):

  

10g

11g以上

排序(varchar2)

xmlagg

listagg

排序(clob)

xmlagg

xmlagg

不排序(varchar2)

wm_concat

wm_concat

不排序(clob)

zh_concat

zh_concat

分享到:
评论

相关推荐

    Oracle聚合函数及其扩展使用

    Oracle 聚合函数是指在 Oracle 数据库中对数据进行汇总和计算的函数。这些函数可以对数据进行统计、分析和计算,得到有用的信息。 1. COUNT(*):COUNT(*) 函数用于计算查询结果中的记录数。例如,SELECT COUNT(*) ...

    oracle常用分析函数与聚合函数的用法

    在Oracle数据库中,分析函数和聚合函数是SQL查询中用于处理和汇总数据的重要工具。本文将详细介绍两者的主要功能和用法。 首先,我们关注的是排名函数。在Oracle中,有三种常用的排名函数: 1. `RANK()`: 这个函数...

    oracle函数大全-数字-字符-日期-聚合函数

    最后,提供的文档和文本文件,如"oracle日期和时间处理汇总.doc"、"Oracle聚合函数RANK和dense_rank的使用.htm"等,都是极好的学习资源,可以深入研究每个函数的详细信息和示例。通过阅读和实践,你将能够充分利用...

    oracle最全函数大全

    这些函数可以大致分为以下几类:分析函数、聚合函数、转换函数、日期型函数、字符型函数、数值型函数以及其他函数。本文将详细介绍每种类型的函数,并提供具体的使用场景和示例。 #### 二、分析函数 分析函数主要...

    oracle常用函数汇总.pdf

    在实际操作中,Oracle还提供了许多其他函数和特性,如聚合函数(SUM, AVG, COUNT等)、连接查询、子查询、游标、触发器等。了解并熟练掌握这些函数和操作是成为Oracle数据库管理员的基础。在编写SQL语句时,应遵循...

    oracle数据仓库分析函数汇总

    本资源“oracle数据仓库分析函数汇总”聚焦于Oracle数据库中的分析函数,尤其是与`OVER()`子句相关的应用,这是一系列功能强大的SQL工具,用于处理窗口或分组数据。 首先,`OVER()`子句允许在单个SQL查询中定义一个...

    oracle 函数大全 参考函数 手册 速查 chm格式

    6. 聚合函数:如COUNT(计数)、SUM(求和)、AVG(平均值)、MAX/MIN(最大值/最小值)等,用于汇总数据。 7. 位操作函数:如BITAND(按位与)、BITOR(按位或)、BITNOT(按位非)等,处理二进制数据。 8. 非...

    oracle函数大全(分类成9个word文档)

    3. "oracle函数介绍(3) 著名函数之聚合函数.doc":聚合函数用于对一组值进行操作并返回一个单一的汇总值。SUM()、AVG()、MAX()和MIN()是最常见的例子,它们分别用于求和、计算平均值、找出最大值和最小值。 4. ...

    oracle内置函数大全

    7. 分组和聚合函数: - `GROUP BY`:对查询结果进行分组。 - `ROLLUP` 和 `CUBE`:生成多级汇总数据。 - `HAVING`:在分组后过滤数据。 8. 连接函数: - `JOIN`:将多个表的数据结合在一起。 - `LEFT JOIN`, `...

    oracle分析函数,窗口函数,报表函数

    报表函数主要涉及对数据的汇总和聚合,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`等。这些函数通常用于生成报表,但也可以结合分析函数在特定窗口内进行更复杂的计算。 ### 结论 Oracle的分析函数、窗口...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    Oracle数据库中的聚合函数是SQL查询中的重要组成部分,用于对数据进行汇总统计。当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们...

    oracle常用函数chm版

    5. **聚集函数**:在数据聚合时,聚集函数非常有用。如`COUNT`统计行数,`SUM`求和,`AVG`计算平均值,`MAX`和`MIN`分别找出最大和最小值。这些函数常在SQL查询的GROUP BY语句中使用,进行数据汇总。 6. **分析函数...

    Oracle分析函数

    **累积聚合函数** - **SUM**: 计算指定表达式的总和。 - **MIN** 和 **MAX**: 查找表达式的最小值和最大值。 - **AVG**: 计算表达式的平均值。 - **COUNT**: 对符合条件的行进行计数。 ##### 2. **排名函数** ...

    Oracle常见函数集锦

    5. **聚合函数** - `COUNT()`:计算行数。 - `SUM()`:求和。 - `AVG()`:计算平均值。 - `MAX()` 和 `MIN()`:找出最大值和最小值。 6. **窗口函数** - `ROW_NUMBER()`:为每一行分配一个唯一的行号。 - `...

    关于oracle decode函数的用法

    通过以上实例可以看出,DECODE函数在Oracle数据库中是一个非常灵活且强大的工具,能够帮助我们在查询中实现复杂的条件判断和数据处理,特别是在需要进行行列互换、数据聚合等场景下,DECODE函数的应用显得尤为关键。

    oracle 分组函数

    其中,分组函数是Oracle SQL查询中的重要组成部分,用于处理大量数据并进行聚合操作。本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上...

    oracle分析函数

    分析函数的主要作用是进行聚合操作,但与传统的聚合函数(如SUM, COUNT, AVG等)不同,它们不仅能够对整个数据集进行汇总,还能在每个分组内产生多行结果,从而提供了更为灵活的数据分析选项。 1. 分析函数的基本...

    Oracle10G函数大全(chm格式的,比较全面)

    4. **聚合函数**: - `COUNT()`: 计算一组值的数量。 - `SUM()`: 计算一组值的总和。 - `AVG()`: 计算一组值的平均值。 - `MAX()`: 找出一组值的最大值。 - `MIN()`: 找出一组值的最小值。 5. **转换函数**: ...

Global site tag (gtag.js) - Google Analytics