OLAP函数语法的总结

函数|语法

OLAP函数语法的总结

ORACLE OLAP 函数
      最近这个东东用得特别多,总结了一下 。

语法: FUNCTION_NAME(,,...)
        OVER
        ()

OLAP函数语法四个部分:
1、function本身 用于对窗口中的数据进行操作;
2、partitioning clause 用于将结果集分区;
3、order by clause 用于对分区中的数据进行排序;
4、windowing clause 用于定义function在其上操作的行的集合,即function所影响的范围。

一、order by对窗口的影响
不含order by的:
SQL> select deptno,sal,sum(sal) over()
  2  from emp;
不含order by时,默认的窗口是从结果集的第一行直到末尾。
含order by的:
SQL> select deptno,sal,
  2         sum(sal) over(order by deptno) as sumsal
  3  from emp;
当含有order by时,默认的窗口是从第一行直到当前分组的最后一行。

二、用于排列的函数
SQL> select empno, deptno, sal,
  2         rank() over
  3         (partition by deptno order by sal desc nulls last) as rank,
  4         dense_rank() over
  5         (partition by deptno order by sal desc nulls last) as dense_rank,
  6         row_number() over
  7         (partition by deptno order by sal desc nulls last) as row_number
  8   from  emp;

三、用于合计的函数

SQL> select deptno,sal,
  2         sum(sal) over (partition by deptno) as sumsal,
  3         avg(sal) over (partition by deptno) as avgsal,
  4         count(*) over (partition by deptno) as count,
  5         max(sal) over (partition by deptno) as maxsal
  6    from emp;

四、开窗语句

1、rows窗口: "rows 5 preceding"

    适用于任何类型而且可以order by多列。

   SQL> select deptno,ename,sal,
          2         sum(sal) over (order by deptno rows 2 preceding) sumsal
          3    from emp;

rows 2 preceding:将当前行和它前面的两行划为一个窗口,因此sum函数就作  用在这三行上面
SQL> select deptno,ename,sal,
  2         sum(sal) over
  3         (partition by deptno order by ename rows 2 preceding) sumsal
  4    from emp
  5  order by deptno,ename;
加了partiton by分区后之后,rows 2 preceding(窗口)只在当前分区内生效,不会影响分区之外的行。
SQL> select ename,sal,hiredate,
  2         first_value(ename)over
  3         (order by hiredate asc rows 5 preceding) first_ename,
  4         first_value(hiredate) over
  5         (order by hiredate asc rows 5 preceding) first_hiredate
  6    from emp
  7  order by hiredate asc;
order by hiredate asc rows 5 preceding: order by之后,取当前行的前5行+当前行作为窗口(共6行)。
2、"range unbounded preceding"

range unbounded preceding会把当前行之前的所有行都包含进来,但当partition by时:

SQL> select deptno,ename,sal,
  2         sum(sal) over
  3         (partition by deptno order by deptno range unbounded preceding) sumsal
  4    from emp;
SQL> select deptno,ename,sal,
  2         sum(sal) over
  3         (order by deptno range unbounded preceding) sumsal
  4   from  emp;
这SQL句子和下面这SQL是等价的:

select deptno,ename,sal,
       sum(sal) over (order by deptno) sumsal
  from  emp;

因为order by的默认窗口总是从结果集的第一行开始到它分组的最后一行。
而partiton by的默认窗口总是从分区的第一行开始。
3、range窗口: "range 100 preceding"

这个子句只适用于number和date,而且只能order by一列。
如果over()里asc排列,意思是[number-100,number]这样一个闭区间是它的窗口。
如果over()里desc排列,意思是[number,number+100]这样一个闭区间是它的窗口。
4、窗口总结

1、unbounded preceding:从当前分区的第一行开始,到当前行结束。
2、current row:从当前行开始,也结束于当前行。
3、[numeric expression] preceding:对于rows来说从当前行之前的第[numeric expression]行开始,到当前行结束。对range来说从小于数值
表达式的值开始,到当前行结束。
4、[numeric expression] following:与[numeric expression] preceding相反。

 

时间: 2024-12-26 13:35:56

OLAP函数语法的总结的相关文章

DB2的olap函数详解(原创)

DB2 olap函数概述  在线分析处理函数(OLAP)是DB2中扩展了关系模型.使关系模型能够理解行集合内的排序方式的重要函数之一.典型的 DB2在线分析处理的格式包括两部分:函数部分和OVER表达式部分. 函数部分包括:ROW_NUMBER.RANK.DENSE_RANK.FIRST_VALUE.LAST_VALUE.LAG.LEAD.COUNT.MIN.MAX.AVG.SUM over表达式部分在示例中进行介绍,这里不具体介绍语法OLAP函数介绍      SELECT          

ASP经典函数语法详细解释

函数|语法 Abs (数值) 绝对值.一个数字的绝对值是它的正值.空字符串 (null) 的绝对值,也是空字符串.未初始化的变数,其绝对为 0 例子:ABS(-2000) 结果:2000 Array (以逗点分隔的数组元素) Array 函数传回数组元素的值. 例子: A=Array(1,2,3)B=A(2)结果: 2说明:变量B为A数组的第二个元素的值. Asc (字符串) 将字符串的第一字母转换成 ANSI (美国国家标准符号)字码. 例子:Asc("Internet")结果:73说明:显示

使用DB2 UDB OLAP函数

使用OLAP函数的一些实用技巧 在线分析处理(online analytical processing,OLAP)函数非常灵活,也很强大.通过使用这些函数,您可以为一些问题找到简单的解决方案,而这些问题本来要么是要迭代一个或者多个游标,要么是要进行递归.在其他某些情况下,编写查询时,使用 OLAP 函数或辅助表比起不使用它们来要容易得多. 本文没有对 OLAP 函数作什么描述,而是描述了实际生活中的一些情况,在这些情况中,往往是通过使用 OLAP 函数得出了简单的解决方案. 使用连续数或日期生成

jquery.serialize() 函数语法及简单实例_jquery

jQuery - serialize() 方法 W3School给出的定义与用法: serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. 您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身. 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中. 语法 $(selector).serialize()详细说明 .serialize() 方法创建以标准 URL 编码表示的文本字符串.它的操作对象是代表表单元素集合的 jQuer

PHP简洁函数(PHP简单明了函数语法)_php技巧

1.与mysql相关 mysql_connect 建立一个与MySQL服务器的连接 语法 resource mysql_connect(string server[,string usingname[,string password[, bool new_link[,int client_flags]]]]) eg: 复制代码 代码如下: $DB_HOST ="localhost"; $DB_LOGIN ="root"; $DB_PASSWORD =" 1

C语言函数语法详解_C 语言

1.概述         在C语言中,函数是来完成子程序或者某个模块的功能.有主程序或者其他函数调用,其他函数之间可以相互调用.同一函数可以被一个或多个函数任意次调用. 注意:     a.一个C程序有一个或多个程序模块组成,每一个程序模块作为一个源程序文件.一个源文件可以为多个C程序共用.     b.程序在编译时是以源文件为单位进行编译,而不是以函数为单位进行编译.一个源文件就是一个编译单元     c.C程序的执行是从main函数开始,也是在main函数中结束整个程序     d.所有函数

Php header()函数语法及使用代码_php技巧

语法: 复制代码 代码如下: Void header(string $string[,bool $replace=true [, int $http_response_code) 向客户端发送原始的HTTP报头需注意:Header函数必须在任何实际的输出前调用,无论是一般的html标签.文件中空行,或者来自php.就是在这个函数之前不能有任何形式的输出.参数说明: 参数 描述string 必需.规定要发送的报头字符串.replace 可选.指示该报头是否替换之前的报头,或添加第二个报头.默认是

Oracle DECODE函数语法使用介绍_oracle

Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数有更多的了解. Oracle DECODE函数 Oracle DECODE函数是Oracle公司独家提供的功能,它是一个功能很强的函数.它虽然不是SQL的标准,但对于性能非常有用.到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准.实际上,这种批评有些片面或不够水平.就象有些马车制造商抱怨亨利.福

C语言OPEN函数语法及其应用

open是一个非标准的低级文件I/O函数,返回的是文件的低级句柄,原型: int open(char* path, int access, --): open是一个可变参数的函数实现,后面的可变参数通常表示unsigned mode,mode参数是否存在要看access的值,path是文件的路径. access和mode的可取值通常在FCNTL.h里面定义,access的可取值如下: #define O_RDONLY 1 #define O_WRONLY 2 #define O_RDWR 4 a