码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2020-01-27 13:54:58      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:跳过   基础教程   一个   process   工作   窗口   group   高级   info   

8-1 窗口函数





作为窗口函数使用的聚合函数
计算移动平均
两个ORDER BY

窗口函数可以进行排序、生成序列号等一般的聚合函数无法实现的高操作。
理解PARTITION BYORDER BY这两个关键字的含义十分重要。


 

什么是窗口函数

在Oracle和 SQL Server中称为分析函数。但是 MySQL 的5.7版本还是不支持窗口函数
OLAP OnLine Analytical Processing 的简称,意思是对数据库数据进行实时分析处理。 例如,市场分析、创建财务报表、创建计划等日常性商务工作。
窗口函数就是为了实现 OLAP 而添加的标准 SQL 功能。

窗口函数的语法
技术图片

窗口函数大体可以分为以下两种。

① 能够作为窗口函数的聚合函数( SUMAVGCOUNTMAXMIN
RANKDENSE_RANKROW_NUMBER 专用窗口函数


语法的基本使用方法——使用RANK函数

正如其名称所示, RANK 是用来计算记录排序的函数。

例如,对于之前使用过的 Product 表中的 8 件商品,让我们根据不同的商品种类(product_type),按照销售单价(sale_price)从低到高的顺序排序,结果如下所示。
技术图片

技术图片

PARTITION BY 能够设定排序的对象范围。

ORDER BY 能够指定按照哪一列、何种顺序进行排序。可以通过关键字
ASC/DESC 来指定升序和降序。省略该关键字时会默认按照 ASC,也就是
升序进行排序。
技术图片
无需指定PARTITION BY

使用窗口函数时起到关键作用的是 PARTITION BY GROUP BY
其中, PARTITION BY 并不是必需的,也就是将整个表作为一个大的窗口来使用。
技术图片


专用窗口函数的种类

RANK函数
计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 位……
DENSE_RANK函数
同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、2 位……
ROW_NUMBER函数
赋予唯一的连续位次。
例)有 3 条记录排在第 1 位时:1 位、2 位、3 位、4 位……

除此之外,各 DBMS 还提供了各自特有的窗口函数。上述 3 个函数(对于支持窗口函数的 DBMS 来说)在所有的 DBMS 中都能够使用。
技术图片

技术图片

技术图片

窗口函数的适用范围

窗口函数只能书写在一个特定的位置,这个位置就是 SELECT 子句之中。

反过来说,就是这类函数不能在WHERE 子句或者 GROUP BY 子句中使用。

之所以在ORDER BY子句中能够使用窗口函数,是因为ORDER BY子句会在SELECT子句之后执行,并且记录保证不会减少。

 

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

标签:跳过   基础教程   一个   process   工作   窗口   group   高级   info   

原文地址:https://www.cnblogs.com/MarlonKang/p/12235782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!