一、什么是窗口函数
窗口函数也称为LOAP函数。OnLine Analytical Processing的简称。意思是对数据库数据进行实时分析处理。
窗口函数就是为实现OLAP而添加的标准SQL功能。
注:截止2016年5月,Oracle/SQL Server/DB2/PostgreSQL的最新版本都已经支持该功能,但目前MySQL5.7还不支持窗口函数。
 
二、窗口函数的语法
1、能够作为窗口函数使用的函数
(1)能够作为窗口函数的聚合函数(SUM/AVG/COUNT/MAX/MIN)
(2)RANK/DENSE_RANK/ROW_NUMBER等专用窗口函数。
 
二、语法的基本使用方法——使用RANK函数

PARTITION BY能够设定排序的对象范围。
ORDER BY能够指定按照哪一列,何种顺序进行排序。

RANK函数并不会减少原表找那个记录的行数。
 
三、无需指定PARTITION BY
 
四、专用窗口函数的种类

注:由于专用窗口函数无需参数,因此通常括号中都是空的。
 
五、窗口函数的使用范围
原则上窗口函数只能在SELECT子句中使用。
 
六、作为窗口函数使用的聚合函数

像这样以“自身记录(当前记录)”作为基准进行统计,就是将聚合函数当做窗口函数使用的最大特征。
 

七、计算移动平均
窗口函数就是将表以窗口为单位进行分割,并在其中进行排序的函数。其实其中还包含在窗口中指定更加详细的汇总范围的备选功能,该备选功能中的汇总范围称为框架。

1、指定框架(汇总范围)
由于框架是根据当前记录来确定的,因此和固定的窗口不同,其范围会随着当前记录的变化而变化。
ROW PRECEDING 截止到之前~行
ROW FOLLOWING 截止到之后~行
 
2、将当前记录的前后行作为汇总对象

 
八、两个ORDER BY
OVER子句中的ORDER BY只是用来决定窗口函数按照什么样的顺序进行计算的,对结果的排列顺序并没有影响。
注:使用汇总函数作为窗口函数使用时,会以当前记录为基准来决定汇总对象的记录。

 
 

第八章 SQL高级处理 8-1 窗口函数的更多相关文章

  1. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

  2. SQL基础教程(第2版)第8章 SQL高级处理:8-1 窗口函数

    第8章 SQL高级处理:8-1 窗口函数 ● 窗口函数可以进行排序.生成序列号等一般的聚合函数无法实现的高级操作.● 理解PARTITION BY和ORDER BY这两个关键字的含义十分重要. ■什么 ...

  3. 《SQL 基础教程》第八章:SQL 高级处理

    本章分为两个部分: 窗口函数 GROUPING 运算符 它们用于以「窗口」为单位的排序.计算总和等任务. OLAP 函数 OLAP 定义:OLAP 是 OnLIne Analytical Proces ...

  4. 第八章 SQL高级处理 8-2 GROUPING运算符

    一.同时得到合计行 合计行是不指定聚合键时得到的汇总结果. UNION ALL与UNION的不同之处是它不会对结果进行排序,因此比UNION性能更好.   二.ROLLUP——同时得出合计和小计 GR ...

  5. oracle sql 高级编程 历史笔记整理

    20130909 周一 oracle sql 开发指南 第7章 高级查询 1.层次化查询select level,ttt.*,sys_connect_by_path(ttt.col1,',') fro ...

  6. SQL 高级查询(层次化查询,递归)

    SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...

  7. SQL高级查询技巧

    SQL高级查询技巧   1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重 ...

  8. 13Microsoft SQL Server SQL 高级事务,锁,游标,分区

    Microsoft SQL Server SQL高级事务,锁,游标,分区 通过采用事务和锁机制,解决了数据库系统的并发性问题. 9.1数据库事务 (1)BEGIN TRANSACTION语句定义事务的 ...

  9. 一些SQL高级函数

    一些SQL高级函数 Posted on 2010-08-08 21:34 moss_tan_jun 阅读(311) 评论(0) 编辑 收藏 长度与分析用 datalength(Char_expr) 返 ...

随机推荐

  1. PullToRefreshListView 进入界面不能立即显示刷新控件的bug 解决方案

    1.首先定位到PullToRefreshListView.java这个文件 2.找到onRefreshing(final boolean doScroll)方法 @Override protected ...

  2. 关于注解Annotation第一篇

    注解的定义格式如下: public @interface 注解名 {定义体} 定义体就是方法的集合,每个方法实则是声明了一个配置参数.方法的名称作为配置参数的名称,方法的返回值类型就是配置参数的类型. ...

  3. windows设置多用户模式

    在实际使用我们较多使用的都是windows系统的单用户模式,它意味着当我们登录一个用户的时候如果另外一个用户也在登录,那么就得等待另外一个用户退出后才可以登录我们这个用户,但是实际需求中,我们经常会遇 ...

  4. 15-hadoop-eclipse插件的安装

    好久没更新了, 也好久没学了, 今天换了个eclipse版本, 安装插件坑了一会, 果然好记性不如烂笔头, 记下来吧 编译安装或者直接安装都可以, 先说下编译安装吧 1, 编译安装, 是使用的ant, ...

  5. spring中获取applicationContext

    常用的5种获取spring 中bean的方式总结: 方法一:在初始化时保存ApplicationContext对象代码:ApplicationContext ac = new FileSystemXm ...

  6. 使用Java设计验证码生成程序

    我们来设计一个简单的验证码生成程序:验证码一个由4位的数字.字母随机组合而成图像,为了避免被光学字元识别(OCR,Optical Character Recognition)之类的程序识别出图片中的数 ...

  7. 线程2--多线程NSThread

    NSThread三种方式创建子线程 /** * NSThread创建线程方式1 * 1> 先创建初始化线程 * 2> start开启线程 */ -(void)creatNSThread { ...

  8. Code Signal_练习题_Make Array Consecutive2

    Description Ratiorg got statues of different sizes as a present from CodeMaster for his birthday, ea ...

  9. 一文告诉你 Event Loop 是什么?

    Event Loop 也叫做"事件循环",它其实与 JavaScript 的运行机制有关. JS初始设计 JavaScript 在设计之初便是单线程,程序运行时,只有一个线程存在, ...

  10. Apache安装完后加入系统服务的相关操作详解

    Apache源码安装完毕后, 1.下面的脚本运行后就可以直接使用service apachexxx stop/start 来控制apache的启动与停止了! cp /usr/local/apache/ ...