[数据库]MySQL窗口函数

news2024/11/17 23:28:02

1.窗口函数是什么

玛雅人造不出轮子,也不需要轮子.

在学完基础以后,通过子查询和聚合函数,理论上可以解决任何复杂的sql查询问题,但是人类发明出来轮子绝对不是用来看着它转圈的.

窗口函数和聚合函数非常相似,区别在于聚合函数是将多个行结合成一个结果,而窗口函数是以某个区域(窗口)为界限,进行计算,不会导致合并.

举个例子,我们有三个人,分别为80 90 100三个成绩

如果我们使用聚合函数avg,那么最终输出的元组只有一条,也就是90

但是如果我们把聚合函数avg改造成窗口函数avg() over(),那么三条数据不会改变,窗口函数会分别计算出90来

这就是窗口函数的作用

2.窗口函数中,窗口的概念:

窗口其实肥肠类似我们在聚类查询的时候操作group by ,group by事情多而且有些数据库要求特别严格 , 窗口相当于以某一行为锚点,来构建窗口.

窗口的构建,其实就是后面的那个over语句

function()  over(partition by ??  order by ?? {RANGE|ROWS})

其中逐个解析里面的参数(注意一下这几个参数之间不能用,链接,并列即可)

partition by: 类似group by的作用,按照某个值进行划分,划分出第一个窗口,举个例子

数据库如下

 我们执行这个语句

select * ,sum(salry) over(partition by name) as rank_salary from test;

查询出来的结果就是

 这就是partition by的作用,其实就是第一步分出窗口

order by : 这个东西很眼熟,我们在聚合函数里也用过,其实功能也是一样的,根据某个东西来进行排序,支持asc和desc两种顺序.同时,这个东西也是rank等和顺序有关函数的前提

但是有一个小小的问题,就是order by会改变默认分区,一旦使用了order by,RANGE属性就会被改成(从当前行到该窗口的第一行),也就是between unbounded preceding and current row

下面是例子,执行代码

select * ,sum(salary) over(partition by name order by salary) as rank_salary from test;

 

RANGE|ROWS: 对于不听话的order by 我们给出的惩罚是.......

在原本的partition的基础上,进一步进行切割,指定具体的窗口大小

其中一共有五个关键字可以作为范围

UNBOUNDED PRECEDING:表示窗口帧没有上限,从窗口的起始位置开始计算,包括窗口的第一行。

N PRECEDING:表示窗口帧的上限是距离当前行 N 行之前的行,包括第 N 行。N 必须是一个非负整数。

CURRENT ROW:表示窗口帧的上限是当前行。

N FOLLOWING:表示窗口帧的下限是距离当前行 N 行之后的行,包括第 N 行。N 必须是一个非负整数。

UNBOUNDED FOLLOWING:表示窗口帧没有下限,直到窗口的结束位置,包括窗口的最后一行。

使用效果,比如我们想要把窗口指定为前一个和后一个,加上本身

select * ,sum(salary) over(order by salary RANGE between
1 preceding and 1 following) as rank_salary from test;

 3.关于其他的窗口函数

窗口的概念已经介绍完了,接下来就了解一下其他的窗口函数即可

 4,例题

等待补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webrtc janus服务器部署在公网,coturn转发媒体流

janus本身部署在公网时,其内部使用的libnice库已经实现了stun的功能,在配置文件janus.jcfg里面,nat_1_1_mapping配置成公网地址,其位于NAT后面的局域网客户端之间可以实现媒体流之间的分享,发布者将媒体流推到公网&…

【网络】-- https协议

目录 http协议 https协议 安全 概念 什么是"加密"? 为什么要加密? 常见的加密方式 对称加密 非对称加密 数据摘要 && 数据指纹 数字签名 HTTPS 的工作过程探究 方案一:只使用对称加密 方案二:只使…

深眸科技|制造行业升级速度加快,2D视觉与3D视觉该如何选择?

随着人工智能的不断发展,机器视觉已经成为当下最炙手可热的技术之一。在制造业转型升级并且迅猛发展的过程中,对于产品的高精度、零缺陷的需求也在不断提升,而机器视觉的出现为制造业产业升级提供了强有力的驱动力。 随着5G、AI等技术的不断…

174_技巧_Power BI 动态格式(万|亿)

174_技巧_Power BI 动态格式(万|亿) 一、背景 Power BI 2023年4月份更新,新增加了一个预览功能:动态格式(Dynamic format strings for measures),度量值的结果可以动态的显示为不同的格式。 今天我们主要来看一个技巧,如何在 P…

[架构之路-171]-《软考-系统分析师》-5-数据库系统-1- 数 据 库 的 控 制 功 能(并发控制、性能优化)

目录 5 . 4 数 据 库 的 控 制 功 能 5.4.1 并发控制 1 . 事务的基本概念 2 . 数据不一致问题 3 . 封锁协议 4 . 死锁问题 5.4.2 数据库性能优化 1 . 硬件升级 2 . 数据库设计 5.4.3 数据库的完整性 1 . 完整性约束条件 2 . 实体完整性 3 . 参照完整性 4 . 用户定…

华为云-使用脚本初始化Linux数据盘

操作场景 本文以云服务器的操作系统为“CentOS 7.4 64位”为例,采用初始化数据盘脚本的方式为数据盘设置分区。 不同云服务器的操作系统的格式化操作可能不同,本文仅供参考。 须知: 首次使用磁盘时,如果您未参考本章节对磁盘执…

json for modern c++

目录 json for modern c概述编译问题问题描述问题解决 读取JSON文件demo json for modern c GitHub - nlohmann/json: JSON for Modern C 概述 json for modern c是一个德国大牛nlohmann写的,该版本的json有以下特点: 1.直观的语法。 2.整个代码由一个…

QT 创建插件 CTK开发(三)

CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。为医学成像提供一组统一的基本功能;促进代码和数据的交互及结合;避免重复开发;在工具包(医学成像)范围内不断扩展到新任务,而不会增加现有任务的负担;整合并适应成功的解决方案。 本专栏文章较为全面…

DP4056国产兼容替代LTC40561A锂离子电池充电芯片

目录 锂电池 VS 锂离子电池DP4056简介DP4056芯片特性 锂电池 VS 锂离子电池 锂电池是以锂金属或锂合金为正极材料,使用非水电解质溶液的电池。锂电池与锂离子电池不一样的是,前者是一次电池,后者是充电电池。锂离子电池工作原理就是依靠锂离…

(大数据开发随笔6)Hadoop 3.3.x分布式环境部署——本地模式

本地模式 材料准备 Linux虚拟机-CentOS7hadoop-3.3.1.tar.gz Index of /hadoop/common (apache.org)jdk-8u321-linux-x64.tar.gz Java Archive | Oracle Centos7虚拟机部署 准备材料: VMware17CentOS-7-x86_64-Minimal-2009.iso centos-7-isos-x86_64安装包下载…

2022国赛34:路由器之间ISIS协议配置

大赛试题内容: 5.RT1以太链路、RT2以太链路之间运行ISIS协议,进程10,分别实现loopback3 之间ipv4互通和ipv6互通。RT1、RT2的NET分别为10.0000.0000.0001.00、10.0000.0000.0002.00,路由器类型是Level-2,接口网络类型为点到点。配置域md5认证和接口md5认证,密码均为Key…

企业如何从0到1落地BI项目

企业需要数据整合、分析展现及应用的完整数据平台方案。为了满足集团化BI建设需求,企业决策层需要基于全局数据进行分析,需要提供数据整合、存储、计算到数据应用的端到端数据平台。 商业智能BI - 派可数据BI可视化分析平台 BI的实践落地需要全生命周期…

[Python基础] 序列(列表/元组)和字典的操作详解

文章目录 序列概念序列列表列表的创建和下标访问创建下标 列表的切片操作列表的遍历列表的插入操作列表的查找和删除列表的拼接 元组元组的相关操作 字典概念字典的创建查找字典中的key,value字典的增删改字典的遍历 序列概念 包含若干个元素, 元素有序排列, 可以通…

APIs -- DOM节点操作

1. 日期对象 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 1.1 实例化 在代码中发现了new关键字时,一般将这个操作称为实例化 创建一个时间对象并获取时间:const date new Date(); // 实例化 new// 1.得到当前时…

React语法(N)

文章目录 React简介概述官网特点生态 react学习的说明新的官网全力投入现代React与Hooks React脚手架create-react-app官网创建和启动项目项目结构sass支持 Vite创建和启动项目项目结构常见配置 虚拟DOM什么是虚拟DOM虚拟DOM优缺点优点:缺点: 虚拟DOM实现…

CTF之命令执行常见绕过

命令执行常见绕过 1.空格代替 当我们执行系统命令时&#xff0c;不免会遇到空格&#xff0c;如cat flag.txt&#xff0c;当空格被程序过滤时&#xff0c;便需要利用以下字符尝试代替绕过&#xff1a; < ${IFS} $IFS$9 %09测试如下&#xff1a; $IFS 在 linux 下表示分隔…

增长黑武器|LTD荣获“2023中国工业数字化赋能奖先锋”

​ 2014年&#xff0c;北京 2015年&#xff0c;南昌 2016年&#xff0c;上海 ...... 2022年&#xff0c;南京 2023年&#xff0c;4月21日 由中国生产力促进中心协会数字经济工作委员会提供指导&#xff0c;由托比网主办的“第六届中国工业数字化高峰论坛”在上海举行。本…

力扣sql中等篇练习(十)

力扣sql中等篇练习(十) 1 查询回答率最高的问题 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # count(具体字段)会自动不统计null值 SELECT t1.question_id survey_log FROM (SELECT question_id,count(answer_id)/count(*) rFROM SurveyLogGROUP…

STM32常用的开发工具有哪些

这么多工具&#xff0c;选择困难啊&#xff0c;先列出来&#xff0c;以后有选择了给大家说&#xff0c;对了&#xff0c;2023年还有一个新玩法就是VSCode 本文为大家汇总 STM32 常用的一些开发工具。 IDE&#xff08;集成开发环境&#xff09; IDE&#xff1a;IntegratedDeve…

springboot_模拟01

demo 模拟springboot pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…