开窗函数的详细用法

  • 一,开窗函数的语法
  • 二,从聚合开窗函数sum(score) over(partition by name )讲起
  • 三,开窗函数之first_value,last_value,lead,lag
  • 四,排名开窗函数ROW_NUMBER、DENSE_RANK、RANK

一,开窗函数的语法

开窗函数的语法为:over(partition by 列名1 order by 列名2 ),括号中的两个关键词partition by 和order by 可以只出现一个。over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。

二,从聚合开窗函数sum(score) over(partition by name )讲起

实不相瞒我看一眼就会了(假的,其实这种又臭又长的字实在懒得看)

sum(score) over(partition by name )
sum()是聚合函数,其实我聚合函数还没学明白,当 sum()函数 后面跟上 over()以后,由sum聚合函数就成为了开窗函数。
over() 括号里面就是定义窗口的内容了,partition 是分区,分组的意思。partition by 就是根据某个字段分组。
所以sum(score) over(partition by name ) ,就是先根据 name 分组(如图),当前面加了sum(score)后就把根据name分组后的,每个(组)窗口里面的字段 score进行求和操作。

select *,sum(score)  over(partition by name) sum窗口函数举例
from kchs
-- 为了简单就只有两个字段,name和score


聚合函数同样需要对数据进行排序,但不会显示排名结果。会将当前名次的数据 与 排在这之前的所有数据 依次做相应的计算。

执行语句:

select *,
sum(score) over (order by id) as 累加求和
from kchs

拓展一下:
一,很多聚合函数都可以用作窗口函数的运算,如SUM、AVG、MAX、MIN、COUNT。
二,和gropu by 不同的是窗口函数会生成多行,而不是想group by 一样只有一行

三,开窗函数之first_value,last_value,lead,lag

first_value:是在窗口里面取到第一个值

first_value(score) over( partition by name)as first_score ,
根据name分区(组),取score列的第一个值

last_value:是在窗口里面取到最后一个值

last_value(score) over(partition by name) as last_score
--根据name分区(组),取score列的最后一个值

lead 是取当前行的上 N 条数据,并且可以设置默认值

lead(score,1,0) over(partition by name ) as lead_score
--根据name分区(组),score列当前行的上面N行,,如果没有就为默认值0

lag 是取当前行的下 N 条数据,并且可以设置默认值

lag(score,1,0) over(partition by name ) as lag_score
--根据name分区(组),score列当前行的下面N行,如果没有就为默认值0

四,排名开窗函数ROW_NUMBER、DENSE_RANK、RANK

row_number ()是为每组的行设置一个连续的递增的数字(123456)

ROW_NUMBER() over( partition by name order by score asc)as ROW_NUMBER_score

rank()是排名,也为每一组的行生成一个序号,如果有相同的值会生成相同的序号,并且接下来的序号是不连序的。例如:有三个人并列第一名,第四名序号为四(111456)

rank() over(partition by name order by score asc) as RANK_score

DENSE_RANK()和RANK()类似,不同的是如果有相同的序号,那么接下来的序号不会间断。例如:有三个人并列第一,第四名序号为2(111234)

DENSE_RANK() over(partition by name order by score asc) as DENSE_RANK_score

注意:
一,排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
二,ORDER BY 指定排名开窗函数的顺序,在排名开窗函数中必须使用ORDER BY语句。
三,PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。

三种开窗函数详细用法,图文详解相关推荐

  1. 二叉树的创建与三种遍历方式(带图文详解)

    二叉树是由多节点组成的,每个节点最多链接两个节点,这两个节点就称为根节点的左树和右树. 每个节点的由数据区,左树,右树组成. typedef struct node {int data;struct ...

  2. 【BIM入门实战】Revit 图元分类有哪三种?Revit图元分类图文详解

    Revit在项目中使用3种类型的图元:模型图元.基准图元和视图专有图元. Revit中的图元也称为族.族包含图元的几何定义和图元所使用的参数.图元的每个实例都由族定义和控制. 1. 模型图元 模型图元 ...

  3. php。defined,PHP defined()函数的使用图文详解

    PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...

  4. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  5. oracle11g32位安装流程_Oracle 11g服务器安装详细步骤图文详解

    Oracle 11g是在推出的最新数据库软件,Oracle 11g有400多项功能,经过了1500多个小时的测试,开发工作量达到了3.6万人/月,相当于1000名员工连续研发3年.Oracle 11g ...

  6. 服务器系统安装oracle数据库,Oracle 11g服务器安装详细步骤图文详解

    Oracle 11g是在推出的最新数据库软件,Oracle 11g有400多项功能,经过了1500多个小时的测试,开发工作量达到了3.6万人/月,相当于1000名员工连续研发3年.Oracle 11g ...

  7. oracle几种例外,Oracle例外用法实例详解

    本文实例讲述了Oracle例外用法.分享给大家供大家参考,具体如下: 一.例外分类 oracle将例外分为预定义例外.非预定义例外和自定义例外三种. 1).预定义例外用于处理常见的oracle错误. ...

  8. map函数的用法python,详解Python map函数及Python map()函数的用法

    python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...

  9. mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回 ...

最新文章

  1. 怎么自学python 知乎-你是如何自学 Python 的?
  2. 如何有效使用Project(1)——编制进度计划、保存基准
  3. 再过四十年,你的女朋友可能是个美丽的机器人!不信你看
  4. 记一次git硬reset导致的代码消失
  5. caffe学习日记--lesson7:caffemodel可视化的两种方法
  6. 7-10 数组循环左移 (20 分)
  7. EXTJS弹出框关闭 隐藏 显示都没问题
  8. AWVS使用教程与实例
  9. Oracle转换Postgres
  10. 酞菁-氧化石墨烯(NiPc- NHCO-EGO)|齐岳生物提供酞菁定制材料
  11. 他捧红了王菲、张学友等近百个巨星,却甘心成为最普通的学佛人…
  12. 实训(一)学生管理系统
  13. 非空子集的生成(二进制法)
  14. 批量删除多个 Word 文档的空白页
  15. Android系统状态栏的信号图标显示流程简介
  16. SQL语句创建、修改视图的方法
  17. 编译原理——SysY编译器实践报告
  18. [计算机网络] 域名系统
  19. XPS如何在线批量转换成PDF
  20. SECVISION智能楼宇视频监控防泄密解决方案

热门文章

  1. Android Framework 的整体建构
  2. git gitgitgitgitgit
  3. 关于Ai打开图片,颜色变色问题
  4. jQuery背景墙聚光灯效果
  5. Hack The Box——Ready
  6. ResNet50是什么
  7. Navicat Premium 连接oracle 提示ORA-01017:用户名/口令无效;登陆被拒绝
  8. 上蔡一高2021高考成绩查询,上蔡一高高考录取名单1
  9. 监控Kafka(kafka_exporter)
  10. mybatisPlus根据起止时间作为条件进行查询