加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server窗口函数简介

发布时间:2016-08-12 14:34:48 所属栏目:MsSql教程 来源:站长网
导读:简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这 样强大的功能被浪费,因此本篇文章主要谈一谈
简介

SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这 样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念。

什么是窗口函数

窗口函数,也可以被称为OLAP函数或分析函数。理解窗口函数可以从理解聚合函数开始,我们知道聚合函数的概念, 就是将某列多行中的值按照聚合规则合并为一行,比如说Sum、AVG等等,简单的概念如图1所示。

SQL Server窗口函数简介

图1.聚合函数

因此,通常来说,聚合后的行数都要小于聚合前的行数。而对于窗口函数来说,输入结果等于输出结果,举一个简单 的例子,如果你计算产品类型A和产品类型B,A产品分5小类,B产品分2小类,应用了窗口函数的结果后可以还是7行,对 窗口函数应用了Count后,附加在每一行上,比如说“A产品,A小类1,5“,而B小类则变为”B产品,B 小类1,2”最后一列就是应用了窗口函数的结果。

现在我们对窗口函数有了初步的概览,文章后我会提供一些具体的例子来让对窗口函数的概念更加深刻,窗口函数除 了上面提到的输入行等于输出行之外,还有如下特性和好处:

类似Group By的聚合

非顺序的访问数据

可以对于窗口函数使用分析函数、聚合函数和排名函数

简化了SQL代码(消除Join)

消除中间表

窗口函数是整个SQL语句最后被执行的部分,这意味着窗口函数是在SQL查询的结果集上进行的,因此不会受到Group By, Having,Where子句的影响。

窗口函数的典型范例是我们在SQL Server 2005之后用到的排序函数,比如代码清单1所示。

Row_Number() OVER (partition by xx ORDERBY xxx desc) RowNumber

代码清单1.可用于分页的排序函数

因此,我们可以把窗口函数的语法抽象出来,如代码清单2所示。

函数() Over (PARTITION By 列1,列2,OrderBy 列3,窗口子句) AS 列别名

代码清单2.窗口函数的语法

一个简单的例子

下面我们来看一个简单的例子,假如说我们希望将AdventureWorks示例数据库中的Employee表按照性别进行聚合,比 如说我希望得到的结果是:“登录名,性别,该性别所有员工的总数”,如果我们使用传统的写法,那一定 会涉及到子查询,如代码清单3所示。

SELECT [LoginID],gender,
    
(SELECT COUNT(*) FROM [AdventureWorks2012].[HumanResources].[Employee] a WHERE a.Gender=b.Gender) AS 

GenderTotal
    
  FROM [AdventureWorks2012].[HumanResources].[Employee] b

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读