MySQL刷题遇到的盲点(五)窗口函数

news2024/7/6 18:19:14

窗口函数

语法:

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)
  • partition by:用来对表分组( partition 子句可以省略,省略就是不指定分组)

  • order by:是对分组后的结果进行排序

<窗口函数>的位置,可以放以下两种函数:

  1. 专用窗口函数。如:rank, dense_rank, row_number等专用窗口函数。

  2. 聚合函数。如sum,avg, count,max, min等

因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。

窗口函数具备了我们之前学过的group by子句分组的功能和order by子句排序的功能。那么,为什么还要用窗口函数呢?

这是因为,group by分组汇总后改变了表的行数,一行只有一个类别,而partiition by和rank函数不会减少原表中的行数

窗口函数的功能:

  •  同时具有分组和排序的功能
  •  不减少原表的行数(经常用来在每组内排名)

使用场景

  • 排名问题。比如:每个部门按业绩来排名

  • topN问题。比如:找出每个部门排名前N的员工进行奖励

面对这类需求,就需要使用sql的高级功能窗口函数

 

具体使用方法

一、使用专用窗口函数

rank函数:

如果有并列名次的行,会占用下一名次的位置。 比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,4。

dense_rank函数:

如果有并列名次的行,不占用下一名次的位置。 比如正常排名是1,2,3,4,但是现在前3名是并列的名次,结果是:1,1,1,2。

row_number函数:

不考虑并列名次的情况。 比如前3名是并列的名次,排名是正常的1,2,3,4。

强调一点:

在上述的这三个专用窗口函数中,函数后面的括号不需要任何参数,保持()空着就可以。

二、使用聚合函数作为窗口函数

聚和窗口函数和上面提到的专用窗口函数用法完全相同,只需要把聚合函数写在窗口函数的位置即可,但是函数后面括号里面不能为空,需要指定聚合的列名。

注意!!!

sum求和,avg平均、count计数、max最大值、min最小值都是针对自身记录、以及自身记录之上的所有数据进行计算。

怎么理解上面这句话呢? 看下面这个例子:

如上图,比如sum(grade)的结果中:

        001号,在使用sum窗口函数后的结果,是对001号的成绩求和;

        002号,在使用sum窗口函数后的结果,是对001,002号的成绩求和;

        003号,在使用sum窗口函数后的结果,是对001,002,003号的成绩求和;

        004号,在使用sum窗口函数后的结果,是对001,002,003,004号的成绩求和。

如果想要知道所有人成绩的总和、平均等聚合结果,看最后一行即可。

其他函数同理。

为什么要这么设计呢?

聚合函数作为窗口函数,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多少(最大值、最小值等)。

同时可以看出每一行数据,对整体统计数据的影响。

文章参考:

通俗易懂的学会:SQL窗口函数

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

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

相关文章

Python爬虫异常处理心得:应对网络故障和资源消耗

作为一名专业的爬虫代理&#xff0c;我知道在爬取数据的过程中&#xff0c;遇到网络故障和资源消耗问题是再正常不过了。今天&#xff0c;我将与大家分享一些关于如何处理这些异常情况的心得和技巧。不论你是在处理网络不稳定还是资源消耗过大的问题&#xff0c;这些技巧能够帮…

每日一学—浅谈什么是互联网广告系统(文末送书福利2.0)

文章目录 &#x1f4cb;前言&#x1f3af;组成部分&#x1f3af;互联网广告系统案例&#x1f4dd;最后&#x1f3af;文末送书&#x1f4da;作者介绍&#x1f4da;内容简介 &#x1f525;参与方式 &#x1f4cb;前言 互联网广告系统是指在互联网上进行广告投放和管理的系统。它…

哈希桶

哈希桶 概念 开散列法又叫链地址法(开链法)&#xff0c;首先对关键码集合用散列函数计算散列地址&#xff08;index x % array.length()-1&#xff09;&#xff0c;具有相同地址的关键码归于同一子集合&#xff0c;每一个子集合称为一个哈希桶&#xff0c;各个桶中的元素通过…

【JS基础】位运算符

JS 位运算符 1.简介 位运算是低级的运算操作&#xff0c;所以其速度往往也是相对较快的。同时&#xff0c;借助位运算的特性还可以实现一些算法&#xff0c;恰当地使用位运算有很多好处。 注意&#xff1a;所有的位运算都是在二进制下进行运算的&#xff01; 2.位运算符 位…

SNP案例:借助TDO工具大型医院的多客户端系统实现高效刷新

“SNP测试数据管理器使得在多客户端系统中执行测试数据刷新变得很容易。这免去了KSSG IT部门耗时的预处理和后处理工作&#xff0c;为我们节省了宝贵的时间和成本。” Paulo Teber, SAP Basis 管理, KSSG 关于KSSG KSSG公司是瑞士较大的医院之一&#xff0c;也是瑞士东部主要的…

【Linux操作系统】GCC编译与静态库、动态库制作详解

GCC是一款广泛使用的开源编译器&#xff0c;它支持多种编程语言&#xff0c;并且具有强大的编译能力。在软件开发中&#xff0c;我们经常需要将代码编译成可执行文件或者库文件。本文将详细介绍GCC编译过程以及如何制作静态库和动态库。 文章目录 一、GCC编译过程1. 预处理阶段…

【MySQL】sql字段约束

在MySQL中&#xff0c;我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段&#xff0c;MySQL会直接禁止插入。 数据类型也是一种约束&#xff0c;但数据类型这个约束太过单一&#xff1b;比如我需要存储的是一个序号&#xff0c;那就不可…

SpringBoot第33讲:SpringBoot集成ShardingJDBC - 基于JPA的读写分离

SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基于JPA的读写分离 本文是SpringBoot第33讲&#xff0c;主要介绍分表分库&#xff0c;以及SpringBoot集成基于 ShardingJDBC 的读写分离实践 文章目录 SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基…

开能转债,大叶转债上市价格预测

开能转债 基本信息 转债名称&#xff1a;开能转债&#xff0c;评级&#xff1a;A&#xff0c;发行规模&#xff1a;2.5亿元。 正股名称&#xff1a;开能健康&#xff0c;今日收盘价&#xff1a;5.6元&#xff0c;转股价格&#xff1a;5.67元。 当前转股价值 转债面值 / 转股价…

第八次作业

1、什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 数据认证的官方回答&#xff1a;数字认证证书它是以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证&#xff0c;确保网上传递信息的安全性、完整性…

Spring Boot2.xx开启监控 Actuator

spring boot actuator介绍 Spring Boot包含许多其他功能&#xff0c;可帮助您在将应用程序推送到生产环境时监视和管理应用程序。 您可以选择使用HTTP端点或JMX来管理和监视应用程序。 审核&#xff0c;运行状况和指标收集也可以自动应用于您的应用程序。 总之Spring Boot Ac…

设计模式——六大设计原则详解

什么是设计模式 随着编程的发展&#xff0c;程序员们发现再解决一些普遍的问题的时候&#xff0c;所使用的解决方案是大体相同的。这些解决方法是众多程序员经过长时间的实践和试错最终总结出来了。所有就有人将它们总结起来形成了设计模式。设计模式出现的意义是为了重用代码&…

玩转Pandas_TA:一站式掌握技术分析指标

01 引言 Pandas_TA —— 一个结合了pandas的强大数据处理能力与技术分析的库&#xff0c;旨在为金融市场分析师和交易者提供一个简单、高效的工具集&#xff0c;从而帮助他们更容易地在数据集上应用各种技术分析指标。pandas_ta为用户提供了直接在DataFrame上运行技术指标计算的…

gitlab 503 错误的解决方案

首先使用 sudo gitlab-ctl status 命令查看哪些服务没用启动 sudo gitlab-ctl status 再用 gitlab-rake gitlab:check 命令检查 gitlab。根据发生的错误一步一步纠正。 gitlab-rake gitlab:check 查看日志 tail /var/log/gitlab/gitaly/current删除gitaly.pid rm /var/opt…

Go的任务调度单元与并发编程

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 本文主要介绍Go语言、进程、线程、协程的出现背景原因以及Go 语言如何解决协程的…

Idea添加mybatis的mapper文件模版

针对Java开发人员&#xff0c;各种框架的配置模版的确是需要随时保留一份&#xff0c;在使用的时候&#xff0c;方便复制粘贴&#xff0c;但是也依然不方便&#xff0c;我们可以给开发工具&#xff08;IDE&#xff09;中添加配置模版&#xff0c;这里我介绍下使用idea开发工具&…

安达发|APS排程软件与某一知名APS软件整体对比

APS排程软件作为高级计划与排程系统。主要是解决小批量、多品种的复杂生产要求。客户的要求交期越来越准。由于成本不断攀升&#xff0c;所以高产出和低成本也是重要的考量因素。 下面我们就安达发APS软件与某一知名APS做一下整体对比&#xff1a; 1.功能实用性 安达发APS排…

记录--前端重新部署如何通知用户

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1. 场景 前端构建完上线&#xff0c;用户还停留还在老页面&#xff0c;用户不知道网页重新部署了&#xff0c;跳转页面的时候有时候js连接hash变了导致报错跳不过去&#xff0c;并且用户体验不到新功能…

springboot 对接 minio 分布式文件系统

1. minio介绍 Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口&#xff0c;可以看做是是S3的开源版本&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象…