【SQL】MySQL中的窗口函数(开窗函数)

2023-09-21 20:39:11

窗口函数是MYSQL8.0新增的

聚合函数: 多行变一行,常见的sum,count,max,min
窗口函数: 行数不变,常见的row_number,rank

语法格式:

窗口函数(表达式) over (partition by … order by … frame_clause)
partition by是分区,类似于group by,如去掉相当于对所有数据进行计算
order by排序
frame_clause用于在分区内指定窗口大小,指定计算的区域


表employee
字段
dname 部门
ename 员工
hiredate 入职日期
salary 薪水
使用场景:
一、分组排序

-- 每个部门的员工按薪水由高到低排序并添加序号
select 
dname,
ename,
salary,
row_number() over (partition by dname order by salary desc) as 序号
from employee 

二、分组累加

-- 每个部门的员工薪水从高到低排序,每个部门薪水累加
select 
dname,
ename,
salary,
sum(salary) over (partition by dname order by salary desc) as 累计值
from employee 

三、分组求和

-- 每个部门薪水总和,相比group by dname求和来说,这里返回的条数不会变少
select 
dname,
ename,
salary,
sum(salary) over (partition by dname) as 部门薪水总和
from employee 

四、前后的差值

-- lag(salary,1,100)返回上一行的salary值,上一行没值默认为100
-- lead()返回下n行的值,用法与lag相同
select 
dname,
ename,
salary,
lag(salary,1,0) over(partition by dname order by salary) as 前一名的薪水,
lag(salary,2) over(partition by dname order by salary) as 前两名的薪水
from employee

五、组内第一个/最后一个的值

-- 头尾函数first_value、last_value
-- first_value取分组内第一个的值
-- last_value取分组内最后一个的值(由于默认计算窗口是从首行到当前行,因此直接使用的话就是取当前行的值,需要指定窗口为首行到最后一行,才能真正实现取组内最后一个值)
select 
dname,
ename,
hiredate,
salary,
first_value(salary) over(partition by dname order by hiredate) as 部门首次入职员工薪资
from employee

六、组内第n个的值

-- nth_value取分组内第n个值(未指定窗口大小则为首行截止到当前行的第n个,不够n个就是null)
select 
dname,
ename,
hiredate,
salary,
nth_value(salary,2) over(partition by dname order by hiredate) as 部门内第二个入职员工薪资
from employee

七、平均分组

-- ntile
select 
dname,
ename,
hiredate,
salary,
ntile(3) over(partition by dname order by hiredate) as 部门内的组号
from employee

指定窗口大小(计算区域):

-- 控制开窗函数的计算区域
-- 指定范围首行到当前行(默认是这个)
rows between unbounded preceding and current row
-- 指定范围前3行到当前行
rows between 3 preceding and current row 
-- 指定范围前3行到后1行
rows between 3 preceding and 1 following
-- 指定范围当前行到最后行
rows between current row and unbounded following
/*
unbounded preceding  首行 
current row          当前行
unbounded following  最后行
n preceding          前n行
n following          后n行
*/ 
更多推荐

滴滴可观测平台 Metrics 指标实时计算如何实现了又准又省?

在滴滴,可观测平台的Metrics数据有一些实时计算的需求,承载这些实时计算需求的是一套又一套的Flink任务。之所以会有多套Flink任务,是因为每个服务按照其业务观测需要不同的指标计算,也就对应了不同数据处理拓扑。我们尽力抽象用户相同的计算需求,不过由于Flink实时计算任务开发模式和实时计算框架的限制,这些观测指

专业软件测评中心:关于软件性能测试的实用建议

软件性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。一、软件性能测试的实用建议1、制定清晰的测试目标:明确测试目标和需求,以便更好地组织测试活动。2、选择合适的测试工具:根据测试需求选择适合的性能测试工具

支付宝支付对接-附带完整代码!!

支付宝对接文章目录支付宝对接1、大纲1.1整体业务流程图1.2、开发流程图1.3、核心参数1.4、支付宝开放平台1.5、支付应用场景1.6、支付宝入驻2、环境准备2.1首先注册自己的支付宝账号2.2沙箱环境2.3支持产品列表3、项目实现3.1、项目代码地址3.2、代码层级3.3、快速启动3.3.1环境准备3.3.2定义

PTA:L1-002 打印沙漏

L1-002打印沙漏分数20本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定

ChatGPT追祖寻宗:GPT-3技术报告要点解读

论文地址:https://arxiv.org/abs/2005.14165往期相关文章:ChatGPT追祖寻宗:GPT-1论文要点解读_五点钟科技的博客-CSDN博客ChatGPT追祖寻宗:GPT-2论文要点解读_五点钟科技的博客-CSDN博客本文的标题之所以取名技术报告而不是论文,是因为长达63页的GPT-3的这篇文

大数据科普

文章目录什么是大数据?大数据的特点大数据应用的挑战大数据技术大数据的发展前景什么是大数据?大数据是指规模巨大、增长快速、多样化的数据资源。随着数字化时代的到来,数据量呈现几何级别的增长,大数据的应用也越发广泛,如金融、医疗、物流等各个领域。大数据的特点大数据的特点主要体现在以下四个方面:量大:大数据的数据量通常是以TB

leetcode 399 除法求值

399.除法求值提示给你一个变量对数组equations和一个实数值数组values作为已知条件,其中equations[i]=[Ai,Bi]和values[i]共同表示等式Ai/Bi=values[i]。每个Ai或Bi是一个表示单个变量的字符串。另有一些以数组queries表示的问题,其中queries[j]=[Cj

使用yum进行软件安装的基础命令

在Linux系统中,特别是基于RedHat、CentOS或Fedora的系统,yum(YellowdogUpdaterModified)是一个非常常用的包管理工具,用于自动下载和安装软件包以及其依赖关系。首先,请确保您的系统中已经安装了yum。通常,基于RedHat的系统默认会安装这个工具。以下是一些使用yum进行软件

【学习记录】Windows10蓝屏问题排查

一、背景家里的windows10不知道从什么时候起,各种蓝屏。原本以为是电脑用久了,散热不行,导致CPU过热保护,但慢慢的就觉得不对劲。一开始是打游戏就蓝屏,然后是看个视频就蓝屏,最后甚至是开机即蓝屏。在无能狂怒的情况下,把所有问题都推给了Win10系统(因为之前Win10确实有很多奇奇怪怪的Bug),学会了ubunt

React(react18)中组件通信05——react-redux

React(react18)中组件通信05——react-redux1.前言1.1React中组件通信的其他方式1.2介绍React-Redux1.2.1简单介绍React-Redux1.2.2官网1.3安装react-redux2.简单改写redux的例子2.1提供store2.2连接Components+UI组件修

手机记笔记软件用哪个?

当我们谈到手机上的笔记软件时,有许多选择,但如果你需要一款功能强大、易于使用且具备多样化功能的笔记应用,那么敬业签是一个极佳的选择。在使用手机笔记方面,无论你是在会议上记录灵感、在旅行中做笔记还是简单地记下日常任务,手机笔记应用可以轻松满足你的需求。它们提供了一个便捷的平台,让你随时随地记录想法和信息。这种便捷性使得手

热文推荐