语法概览

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJhbm90ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="700" height="250" alt="">


Analytic-Function

Analytic_Clause之PARTITION子句

Analytic_Clause之ORDER BY子句

Analytic_Clause之WINDOWING子句

举例:

以下看一个样例简单过下语法:

例:

sum(sal) over (partition by deptno order by ename) new_alias



sum就是函数名



(sal)是分析函数的參数,每一个函数有0~3个參数,參数能够是表达式,比如:sum(sal+comm)



over() 是开窗函数。这是开启分析函数的起点,对于既可作为聚集函数又可作为分析函数的函数,Oracle无法识别,必须用over来标识此函数为分析函数,此处不可省。



partition by deptno 是可选的分区子句,假设不存在不论什么分区子句,则所有的结果集可看作一个单一的大区

ORDER by则是窗体规则;

ROW |range BETWEEN...AND 是窗体范围(row就像通过自身位置的前后物理座位来找相应的位置。相对固定。而range是通过某种条件来找位置,须要计算方能确定相应位置,如长我3岁和小我两岁的人。)





关于窗体范围的取数方式有多种,看似很复杂,事实上不难,我们開始慢慢剖析:

 

 关键位置就3个:1. 分组第一行Unbounded preceding  2. 当前行Current ROW  3.分组最后一行 Unbounded following

 

 接下来,产生了最简单的三个取数范围: 

 

     分组第一行->当前行 rows [between] unbounded preceding [and current row]。

     分组第一行->分组最后一行   rows between unbounded preceding and unbounded following。 

     当前行->分组最后一行 rows between current row and unbounded following

     

 为什么课程分析函数会让人觉的很复杂呢。我们来看看,这个窗体范围有两种取数方式,一个是依据物理位置。就是rowkeyword。一个是依据逻辑位置取数,就是range,这时刚才的取数范围从3个变成6个了,例如以下:

 

 ROWS的  分组第一行->当前行。分组第一行->分组最后一行。 当前行->分组最后一行

 RANGE的 分组第一行->当前行,分组第一行->分组最后一行, 当前行->分组最后一行

 

 只是这种场景都考虑周全了吗,还有没有漏考虑的,有啊。我们继续看看有哪些可能:





   从分组第一行->当前行前n行             rows between unbounded preceding and n行 preceding

   从分组第一行->当前行后n行             rows between unbounded preceding and n行 following                                   

                                    

   从当前行->当前行后n行                 rows between current row and n行 following

   从当前行前n行->当前行                 rows between n行 preceding and CURRENT ROW

                                    

   从当前行前n行->分组最后一行           rows between n行 preceding and unbounded following

   从当前行后n行->分组最后一行           rows between n行 following and unbounded following

   从当前行前n1行->到当前行前n2行        rows between n1行 preceding and n2行 preceding

   从当前行后n1行->到当前行后n2行        rows between n1行 following and n2行 following

   

   还有没有。有!

   

   从当前行前n1行到当前行后n2行          rows BETWEEN n1行 preceding and n2行 following

   

   还有没有比方从分组第一行后n行到当前行,从当前行到分组最后一行前n行啥的啊? 

   哦。那倒是没有了,对了,你脑子还不够迷糊啊,记这么多???

   

   总算结束了,只是另一个窗体開始于当前行,结束于当前行的。只是这无意义,要了干啥呢?所以,算算,至少有9个。

   考虑到rows 和range两套人马。这下又多了18个了。加上前面的6个,就是24个了。

只是后面多出来的这18个,用到的几率比前面6个要少不少。





   对了。另一件非常重要的事要交代

     

     不写between AND  ,在有order BY 的情况下,就是分组第一行到当前行                        BETWEEN unbounded preceding  and current row

     不写between AND  ,在没有order BY 的情况下。就是分组第一行到分组最后一行;     BETWEEN unbounded preceding and unbounded following

分析函数 VS 聚合函数

从上面的样例我们能够知道,分析函数和聚合函数的主要差异有:

1. 分析函数每组有多少行就返回多少行(好比多一个伪列)。而聚合函数是每组无论有多少行都被聚合成一行。

2. 分析函数的order by 和聚合函数order by 排序的概念不一样,分析函数的order BY 标记从分组第一行到当前行的范围圈定,然后根据这个范围,根据这个顺序開始聚合累加。集合函数oracle by它不影响数据,只影响排序。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

[Oracle] 分析功能(1)- 语法的更多相关文章

  1. 转-利用Oracle审计功能来监测试环境的变化

    http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...

  2. oracle 存储过程的基本语法

    原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) I ...

  3. 基于Cesium三维地图项目记录_通视分析功能的实现

    实现了剖面分析功能之后,下面来看看如何实现通视分析,还是基本按照之前的思路实现: 了解软件LocaScape是怎么实现的: 网址如下:http://www.locaspace.cn/V3.0/help ...

  4. 论坛:设计实体-->分析功能-->实现功能 之 《分析功能》

    其中 管理文章 的功能没有做,以下做的设计 浏览与参与 功能的步骤 分析功能   5个功能.   7个请求. 实现功能   Action, 7个方法   Service   Dao   Jsp For ...

  5. Oracle分析関数

    Oracleの分析関数のサンプル集 概要 Oracleコミュニティでよく見かける分析関数の使用例を 習うより慣れろ形式で.分析関数のイメージを付けて.まとめて紹介します. Oracle11gR1で動作 ...

  6. 支付宝小程序与微信小程序开发功能和语法糖不同

    最近开始负责公司webapp数据打通支付宝小程序,之前已经打通了微信小程序,现在根据支付宝小程序的开发文档在之前的模板上面做修改. 在修改模板的过程中,总结一下双方功能和语法糖的不同之处. 框架: a ...

  7. Oracle:DBMS_STATS.GATHER_TABLE_STATS的语法

    转自: http://cjjwzs.iteye.com/blog/1143893 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.G ...

  8. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

  9. ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT  ...

随机推荐

  1. [WPF]Binding的Converter和Validator

    不拘一格用数据的Converter 上篇文已经说明,Binding就是数据源与目标之间的“关联”.大多数情况下,数据从Source到Target以及从Target返回Source都是“直来直去”的,但 ...

  2. windows phone 独立存储空间的操作 (2)

    原文:windows phone 独立存储空间的操作 (2) IsolatedStorage独立存储空间是保存应用程序的一些数据已经配置文件,独立存储空间相对于其他的wp程序是独立的,也就是说每个wp ...

  3. 设计模式10---设计模式之原型模式(Prototype)

    1.场景模式 考虑这样一个实际应用:订单处理系统 里面有一个保存订单的功能,当产品数量超过1000份以后,拆成两份订单,再超,那么就再拆.直到每份订单不超过1000为止,订单有两种,一个是个人订单,一 ...

  4. Form表单中的action路径问题

    今天刚接触web,在用jsp和servlet做一个简单的登陆的时候在Form表单action属性和method属性的一些问题:  我遇到的是Form表单提交到servelet处理时遇到的问题:  (1 ...

  5. 基于 Android 的 3D 视频示例代码

    笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...

  6. Cocos2d-x3.0 lua捆绑C++分类

    我知道这个纪录Lua结合整个过程. 原文地址:http://blog.csdn.net/qqmcy/article/details/26099859 准备工作: 1.创一个一个Lua的2dxproje ...

  7. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】

    package main /* Create by sndnvaps<sndnvaps@gmail.com> * date : 2015-04-05 * upload datapoint ...

  8. 【原创】leetCodeOj --- Largest Number 解题报告

    原题地址: https://oj.leetcode.com/problems/largest-number/ 题目内容: Given a list of non negative integers, ...

  9. ssh否password登陆server

    在线辅导课非常多,但仍录,使用时方便日后查询. 两server,内联网ip每间: 172.16.3.91 (本地计算机) 172.16.3.92 (远程机) 现在想在本地计算机上通过ssh 172.1 ...

  10. JS学习笔记-OO疑问之封装

    封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 一.匿名函数 即没有名字的函数,其创建方式为 fu ...