目录

一、开窗函数和聚合函数的含义

1、开窗函数的定义

2、开窗函数

二、开窗函数的具体介绍---聚合开窗函数和排序开窗函数

1、聚合开窗函数

2、排序开窗函数


一、开窗函数和聚合函数的含义

1、开窗函数的定义

它和聚合函数是一样的 ,都是对行的集合组进行聚合计算。它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。反正我理解这个函数已经使用好子查询或者是其它方式求得聚合列的值给我合并。

但是与聚合函数不同的是,开窗函数在聚合函数后增加了一个OVER关键字。

2、开窗函数

①、格式

             函数名(列) OVER(选项)

②、分类

第一大类:聚合开窗函数====》聚合函数(列) OVER (选项),这里的选项可以是PARTITION BY子句,但不可是ORDER BY子句

第二大类:排序开窗函数====》排序函数(列) OVER(选项),这里的选项可以是ORDER BY子句,也可以是 OVER(PARTITION BY子句 ORDER BY子句),但不可以是PARTITION BY子句

二、开窗函数的具体介绍---聚合开窗函数和排序开窗函数

1、聚合开窗函数

OVER 关键字表示把聚合函数当成聚合开窗函数而不是聚合函数。SQL 标准允许将所有聚合函数用做聚合开窗函数。在上边的例子中,开窗函数COUNT(*) OVER()对于查询结果的每一行都返回所有符合条件的行的条数。OVER关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围。如果OVER关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算。

开窗函数的OVER关键字后括号中的可以使用PARTITION BY 子句来定义行的分区来供进行聚合计算。与GROUP BY 子句不同,PARTITION BY 子句创建的分区是独立于结果集的,创建的分区只是供进行聚合计算的,而且不同的开窗函数所创建的分区也不互相影响。下面的SQL语句用于显示每一个人员的信息以及所属城市的人员数:

SELECT FName, FCITY, FAGE, FSalary,    //姓名、城市人员数、年龄、薪水
COUNT(FName) OVER(PARTITION BY FCITY)
FROM T_Person

OVER(PARTITION BY FCITY)表示对结果集按照FCITY进行分区,并且计算当前行所属的组的聚合计算结果。在同一个SELECT语句中可以同时使用多个开窗函数,而且这些开窗函数并不会相互干扰。比如下面的SQL语句用于显示每一个人员的信息、所属城市的人员数以及同龄人的人数:

SELECT FName,FCITY, FAGE, FSalary,
COUNT(FName) OVER(PARTITION BY FCITY),
COUNT(FName) OVER(PARTITION BY FAGE)
FROM T_Person

2、排序开窗函数

对于排序开窗函数来讲,它支持的开窗函数分别为:ROW_NUMBER(行号)、RANK(排名)、DENSE_RANK(密集排名)和NTILE(分组排名)。

select  FName, FSalary, FCity, FAge,
row_number() over(order by FSalary) as rownum,
rank() over(order by FSalary) as rank,
dense_rank() over(order by FSalary) as dense_rank,
ntile(6) over(order by FSalary)as ntile
from  T_Person
order by  FName  

①、对于row_number() over(order by FSalary) as rownum来说,这个排序开窗函数是按FSalary升序的方式来排序,并得出排序结果的序号

②、对于rank() over(order by FSalary) as rank来说,这个排序形容函数是按FSalary升序的方式来排序,并得出排序结果的排名号。这个函数求出来的排名结果可以排列,并列排名之后的排名将是并列的排名加上并列数(简单说每个人只有一种排名,然后出现两个并列第一名的情况,这时候排在两个第一名后面的人将是第三名,也就是没有了第二名,但是有两个第一名)

③、对于dense_rank() over(order by FSalary) as dense_rank来说,这个排序函数是按FSalary升序的方式来排序,并得出排序结果的排名号。这个函数与rand()函数不同在于,并列排名之后的排名只是并列排名加1(简单说每个人只有一种排名,然后出现两个并列第一名的情况,这时候排在两个第一名后面的人将是第二名,也就是两个第一名,一个第二名)

④、对于ntile(6) over(order by FSalary)as ntile 来说,这个排序函数是按FSalary升序的方式来排序,然后6等分成6个组吗,并显示所在组的序号。

排序函数和聚合开窗函数类似,也支持在OVER子句中使用PARTITION BY语句。例如:

select  FName, FSalary, FCity, FAge,
row_number() over(partition by FName  order by FSalary) as rownum,
rank() over(partition by FName order by FSalary) as rank,
dense_rank() over(partition by FName order by FSalary) as dense_rank,
ntile(6) over(partition by FName order by FSalary)as ntile
from  T_Person
order by  FName

参考:sql中的 开窗函数over() 聚合函数 排名函数

函数 over() 的含义相关推荐

  1. ShellExecute函数返回值含义

    ShellExecute函数返回值含义 如果函数执行成功,那么返回值就是该运行的程序的实例句柄(例如你打开一个txt文件,如果成功了,返回的是关联到txt文件类型的应用程序的句柄).或者是一个DDE服 ...

  2. C/C++中函数指针的含义(转)

                                 C/C++中函数指针的含义 函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?如果我们有一个int test(int a ...

  3. zeros什么意思_matlab中zeros函数是什么含义?MATLAB中zeros表示表示什么意思

    matlab中zeros函数是什么含义?MATLAB中zeros表示表示什么意思 发表时间:2019-12-26 10:20:18 小编:4326手游网 阅读: 在手机上看 手机扫描阅读 MATLAB ...

  4. js给select下拉框赋值-通过jquery方法赋值;jqueryslideBox(jquery轮播);jquery获取当前输入框值、is函数、function($)含义

    JS_Select赋值的几种方式 jquery添加元素菜鸟教程 时间控件联动,根据选择日期+7天 jquery轮播之slideBox参考1 jquery轮播之slideBox参考2 jquery轮播之 ...

  5. python不允许使用关键字作为变量名、允许使用内置函数_【判断题】Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做...

    [判断题]Python不允许使用关键字作为变量名,但是允许使用内置函数名作为变量名,不过这会改变函数名的含义,所以不建议这样做 更多相关问题 [单选,A2型题,A1/A2型题] <十四经发挥&g ...

  6. python不允许使用关键字作为变量名、允许使用内置函数_Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义。...

    Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义. 答:对 对于检查出的无效MAC帧,以太网负责重传. 答:× 哪一年开始中国成为世界第二大经济体? 答:2 ...

  7. C++ sort()函数的cmp含义

    <algorithm>   std::sort(first,last,cmp); 使用的范围是[first,last) 省略 cmp,使用 sort(first,last), 则默认从 小 ...

  8. 关于数学中“函数(function)”的含义

    目录 1. 问题 2. "function"是如何翻译成"函数"的? 3. "function"是谁引入数学中的,其意义何在? 3.1 &q ...

  9. c语言函数参数的含义,C语言函数的含义

    C语言函数的含义 C语言的发展颇为有趣,它的原型ALGOL 60语言.那么大家知道C语言函数是什么吗?下面一起来看看! 函数(Function)是一段可以重复使用的代码,这是从整体上对函数的认识. C ...

  10. 梯度、Hessian矩阵、平面方程的法线以及函数导数的含义

    想必单独论及" 梯度.Hessian矩阵.平面方程的法线以及函数导数"等四个基本概念的时候,绝大部分人都能够很容易地谈个一二三,基本没有问题. 其实在应用的时候,这几个概念经常被混 ...

最新文章

  1. 前端性能优化 —— 项目瘦身
  2. DF标志和串传送指令
  3. 一看就会之—利用IIS服务发布网站(实践篇)上
  4. 十二、K8s job cronjob相关操作
  5. php l框架,一个很简单的PHP框架lyue
  6. 【MySQL】数据库基础知识
  7. Java数据库面试题
  8. 金万维异速联服务器重装,金万维异速联服务器配置说明
  9. RS485芯片UN485E的特点及其应用
  10. Linux如何删除用户
  11. Excel筛选重复数据
  12. 猿圈19年校招笔试题
  13. csv导出文件名乱码解决
  14. php substr 中文_php substr中文截取乱码解决办法
  15. mysql小王 保密_街机斗地主小王搓牌
  16. 9月14日更新的sublime激活码
  17. 《计算机网络自顶向下方法》读书笔记(一):计算机网络和因特网
  18. [ 生成函数 ] Codeforces891E Lust
  19. 我的微软漫漫信仰路【多图】
  20. 【原创】MarkDown-常用模板

热门文章

  1. 窃听手机执法如何保存隐私
  2. 数独解法 C++实现
  3. 如何将多个mp3文件合并成一个?
  4. Windows10 家庭版关闭安全中心(defender)
  5. Python-并发、并行、协成的简易理解
  6. wangEditor富文本自定义图片宽度
  7. Vue视频教程 向军Vue基础教程 共86课
  8. 如何在Chrome中为Gmail启用桌面通知
  9. backdoor-factory工具使用
  10. python几何拼贴画_什么是拼贴艺术、集合艺术、拼贴画?