聚合函数

原创 2016年06月01日 15:17:43
  1. 最大最小函数
    max和min是用来取某个字段的最大最小值,并不是说如果你有几个数,然后你直接从它们中取出最大或者最小,由于我不知道greatest和least这两个函数,最后我实现的是通过case去比较的,如果A大于B就取A,否则取B,现在就可以直接用greatest(A, B)来实现了。
  2. coalescue
    返回表达式列表中第一个非空的值,列表必须都是相同类型,也可以是一个表的同一行、不同列的值进行比较。
SELECT coalesce(1,NULL,2) FROM dual; -- 返回1
SELECT coalesce(NULL,2,1) FROM dual; -- 返回2
SELECT coalesce(t.empno,t.mgr) FROM scott.emp t; -- 效果类似 NVL( t.empno, t.mgr )
  1. greatest
    返回表达式列表中最大值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当列表中有一个值为null,那么就返回null,这个地方需要注意,如果需要当值为null的时候,可以考虑用nvl转为0来进行比较。
SELECT greatest(1,3,2) FROM dual; -- 返回3
SELECT greatest('A','B','C') FROM dual; -- 返回C
SELECT greatest(NULL,'B','C') FROM dual; -- 返回null
SELECT greatest(t.empno,t.mgr) FROM scott.emp t; -- 返回empno和mgr 较大值
  1. least
    返回表达式列表中最小值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。当列表中有一个值为null,那么就返回null,这个地方需要注意,如果需要当值为null的时候,可以考虑用nvl转为0来进行比较。
SELECT least(1,3,2) FROM dual; -- 返回1
SELECT least('A','B','C') FROM dual; -- 返回A
SELECT least(NULL,'B','C') FROM dual; -- 返回null
SELECT least(t.empno,t.mgr) FROM scott.emp t; -- 返回empno和mgr 较小值

对于max和min函数,如果处理的列中有null值,那么max和min会忽略null值,但是,如果在该列中,所有行的值都是null,那么max、min的返回值就是null。

  1. wm_concat
    If you are not running 11g Release 2 or above, but are running a version of the database where the WM_CONCAT function is present, then it is a zero effort solution as it performs the aggregation for you. It is actually an example of a user defined aggregate function described below, but Oracle have done all the work for you.
    Note that WM_CONCAT is undocumented and unsupported by Oracle, meaning it should not be used in production systems. The LISTAGG function, which can produce the same output asWM_CONCAT is both documented and supported by Oracle.
    WM_CONCAT is an undocumented function and as such is not supported by Oracle for user applications (MOS Note ID 1336219.1). If this concerns you, use a User-Defined Aggregate Function described below.Also, WM_CONCAT has been removed from 12c onward, so you can’t pick this option.
COLUMN employees FORMAT A50
SELECT deptno, wm_concat(ename) AS employees
FROM   emp
GROUP BY deptno;
    DEPTNO EMPLOYEES
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,FORD,ADAMS,SCOTT,JONES
        30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
3 rows selected.
  1. LISTAGG
    The LISTAGG analytic function was introduced in Oracle 11g Release 2, making it very easy to aggregate strings. The nice thing about this function is it also allows us to order the elements in the concatenated list. If you are using 11g Release 2 you should use this function for string aggregation.
COLUMN employees FORMAT A50
SELECT deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM   emp
GROUP BY deptno;
    DEPTNO EMPLOYEES
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
  1. NVL和NVL2
    NVL ( expr1 , expr2 ): If expr1 is null, then NVL returns expr2. If expr1 is not null, then NVL returns expr1.
    NVL2 ( expr1 , expr2 , expr3 ): If expr1 is null, then NVL2 returns expr3. If expr1 is not null, then NVL2 returns expr2
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

自定义字符串聚合函数

  • 2012年08月23日 11:09
  • 2KB
  • 下载

H2Database聚合函数

  • 2017年07月27日 15:59
  • 264KB
  • 下载

Hive通用型自定义聚合函数(UDAF)

在使用hive进行数据处理时,经常会用到group by语法,但对分组的操作,hive没有mysql支持得好: group_concat([DISTINCT] 要连接的字段 [Order BY AS...

mysql聚合函数rollup和cube

一、with rollup: with rollup 通常和group by 语句一起使用,是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。   假设用户需...

Oracle聚合函数及其扩展使用

  • 2011年04月16日 18:46
  • 69KB
  • 下载

Accessoft-聚合函数的示例

  • 2013年07月15日 21:40
  • 236KB
  • 下载

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

标签:  杂谈 分类: 电脑数学 T-SQL核心语句形式: SELECT     --指定要选择的列或行及其限定  [INTO ]      --IN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:聚合函数
举报原因:
原因补充:

(最多只允许输入30个字)