与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是普通聚合函数每组只能返回一个值,而开窗函数可以每组返回多个值。

实验一

比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000元的员工个数,执行下面的SQL语句

select t.fcity,t.fage,count(*) from person t where t.fsalary<5000

这个语句显然是错误的,因为count()是聚合函数,然后fname和fage字段没有包含分组里面。

实验二

那么,这样写呢?

select t.fcity,t.fage,count(*) from person t where t.fsalary<5000 group by t.fcity,t.fage

查询结果

这与我们每行中都显示所有工资小于5000元的员工个数这个条件是不符合的,那么应该怎么写呢?

实验三

 
  1. select t.fcity,

  2. t.fage,

  3. (select count(*) from person f where f.fsalary < 5000)

  4. from person t

  5. where t.fsalary < 5000

查询结果:

这次的查询结果和我们想要的结果一样了,但是这样写多了一个子查询,非常麻烦。使用开窗函数可以大大简化实现,下面看一下开窗函数要实现这个效果怎么写

实验四

 
  1. select t.fcity, t.fage, count(*) over()

  2. from person t

  3. where t.fsalary < 5000

看下执行效果:

可以看到这个SQL语句与我们第一个实验不同的是我们在count(*)后面加了一个over关键字。

开窗函数的调用格式为:

函数名(列)over(选项)

over关键字表示把函数当成开窗函数而不是聚合函数,SQL标准允许将所有聚合函数用做开窗函数,使用over关键字来区分这两种用法。

在上面的例子中,开窗函数count(*) over()对于查询结果的每一行都返回所有符合条件的行的条数,over关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围(后面博客会持续更新),如果over关键字后的括号中选项为空,则开窗函数会对结果集中的所有行进行聚合运算。当然,不只是count(*) over,max(fage) over(),min(fage) over()都可以。

原文参考:https://blog.csdn.net/mascf/article/details/50533922

sql:函数:开窗函数简介相关推荐

  1. html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同

    sql over开窗函数 和group by的区别 / 蓝讯如果有多个聚合函数,但是分组依据不同,此时只能使用开窗函数. 而GROUP BY要求聚合函数的分组依据一致. SQL Server中的开窗函 ...

  2. 【转】SQL SERVER 开窗函数简介

    在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...

  3. SQL:开窗函数(窗口函数)

    4. 窗口函数 目录 4. 窗口函数 4.1 排序窗口函数rank 4.2 rank(), dense_rank(), row_number()区别 4.3 .排序截取数据lag(),lead(),n ...

  4. 73、Spark SQL之开窗函数以及top3销售额统计案例实战

    开窗函数以及top3销售额统计案例实战 Spark 1.4.x版本以后,为Spark SQL和DataFrame引入了开窗函数,比如最经典,最常用的,row_number(),可以让我们实现分组取to ...

  5. 16 ,spark sql : 开窗函数 ,top3

    一 ,开窗函数 : 1 ,共几行 : sql : val sql = "select sid,sname,count(1) over() cnt from student" val ...

  6. Sql Server 开窗函数Over()的使用

    利用over(),将统计信息计算出来,然后直接筛选结果集 1 declare @t table( 2 ProductID int, 3 ProductName varchar(20), 4 Produ ...

  7. Spark sql之开窗函数

    目录 一.开窗函数的分类 二.聚合函数 三.排序函数 1. ROW_NUMBER 连续递增 2. RANK 跳跃排序 3. DENSE_RANK 连续排序 4. NTILE 分组排名 四.开窗函数之 ...

  8. Hive-窗口函数/开窗函数(重点理解~~~)

    思路:通过开窗函数进行分组,然后实现topN的排序 OVER函数 按需求查询数据: (1)查询在 2017 年 4 月份购买过的顾客及总人数 (2) 查询顾客的购买明细及月购买总额 (3)将每个顾客的 ...

  9. 数据分析(SQL)常见面试题:开窗函数

    一.什么是开窗函数 开窗函数/分析函数:over()        开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 开窗函数的调用格式为: 函数名(列名) OVER(parti ...

  10. SQL开窗函数(窗口函数)详解

    一.什么是开窗函数 开窗函数/分析函数:over() 开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 开窗函数的调用格式为: 函数名(列名) OVER(partition by ...

最新文章

  1. 奥鹏C语言专科在线作业答案,奥鹏13春电子科大《C语言(专科)》在线作业3答案...
  2. python发挥程度_你为什么用 Python?
  3. 在微型计算机中pci指的是一种,2010新疆维吾尔自治区计算机等级考试二级理论考试试题及答案...
  4. jQuery EasyUI dialog 居中最简单的办法
  5. LeetCode Implement Queue using Stacks (数据结构)
  6. javascript option 菜单图标_苹果电脑上神奇的Option键 巧用option键提升效率
  7. sed搜索某行在行末追加_示范sed指定某行插入 追加和全局替换
  8. python中input数组_python – 在NumPy数组中搜索序列
  9. map to javaBean
  10. java queue 清空_java swing清除事件队列
  11. 小红旗图标在excel如何输入_excel数据核对技巧:如何用函数公式标识输入正误...
  12. Python支持向量机(SVM)实例
  13. 【ASP.NET Web API教程】6.1 媒体格式化器
  14. Python中简单的编程
  15. 拼音排序mysql_MySQL拼音排序解决方案解决办法
  16. python os模块安装方法_Python模块——os模块详解
  17. GB/T19001—2008质量管理体系要求、标准、贯标(贯彻标准)
  18. uni-app项目的开发和发布流程(包括开发版、体验版、正式版)
  19. AVFoundation学习记录
  20. easyuefi如何添加引导_UEFI怎么用 UEFI安全启动设置添加方法步骤图解

热门文章

  1. 星号下三角形python答案_Python利用for循环打印星号三角形的案例
  2. 中电信启动超大数据中心交换机招标
  3. java毕业设计企业员工考勤系统的设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
  4. 个人对软件工程的期望及个人目标
  5. 使用IPC扫描器进行网络扫描
  6. 计算机里的MAC,怎么在mac苹果电脑中查看电脑开机运行的时长
  7. 跨越“数字鸿沟”,日本老年智能化服务的解法
  8. 单片机原理及应用之AT89S52
  9. sql2005 查询分析器 自动换行
  10. 计算机无法用u盘重装系统,电脑进不了系统怎么用u盘重装系统?