MySql8.x---开窗函数
1、定义
语法结构: ** 开窗函数|聚合函数 over([分组函数] [排序函数] [自定义窗口]) **
分组函数:partition by ...,根据指定的字段对表分组,分组字段可以有多个。省略时表示整个表为一组。
排序函数:order by ...,排序字段也可以有多个,当排序字段为多个时表示先按照第一个字段排序,当第一个字段相等确定不了顺序时再按照第二个字段排序,以此类推…
自定义窗口:mysql中的窗口类型有两种:rows和range。rows是以物理行距离为基准通过计算与当前行的物理距离计算窗口大小,range是以当前行的值为基准通过计算与当前行值的差值计算窗口大小。
窗口大小可通过between 上界 and 下界来指定,其中,窗口的上下界分别有下面几种取值:
- unbounded preceding:包含当前行及当前行之前的所有记录。
- n preceding:包含当前行及当前行之前的n-1行,实际窗口大小n。
- current row:仅包含当前行。
- unbounded following:包含当前行及当前行之后的所有记录。
- n following:包含当前行及当前行之后的n-1行,实际窗口大小n。
当窗口下界为current row时,可以不使用between and,也就是下面几种情况可简写:
- between unbounded preceding and current row --> unbounded preceding
- between n preceding and current row --> n preceding
- between current row and current row --> current row
排序:
- row_number() over() 从小到大依次排序 如:1,2,3,4,5
- rank() over() 相同数据并列保存,下一个值跳值,如:1,2,2,4
- dense_rank() over() 相同数据并列保存,不存着断值,如:1,2,2,3,3,3,4
位移:
- lag(字段,往下位移行数,往下没有行时默认值) over()
- lead(字段,往上位移行数,往上没有行时默认值) over()
求和:
- sum(字段) over()
指定顺序的字段值:
- first_value(col):取窗口中字段col的第一个值。
- last_value(col):取窗口中字段col的最后一个值。
- nth_value(col, n):取窗口中第n顺序的值。
2、语法
- 方式一:按照列所有行进行分组
over(partition by 列)
- 方式二:按照列排序
over(order by 列)
- 方式三:按照列1分组,按照列2排序
over(partition by 列1 order by 列2)
3、练习
源数据sql:
CREATE TABLE `student_scores` (
`sid` INT PRIMARY KEY,
`student_id` INT,
`student_name` VARCHAR(50),
`course_id` INT,
`course_name` VARCHAR(50),
`num` INT
);
INSERT INTO `student_scores` (`sid`, `student_id`, `student_name`, `course_id`, `course_name`, `num`) VALUES
(1, 1, 'Alice', 1, 'Math', 10),
(2, 1, 'Alice', 2, 'Physics', 9),
(5, 1, 'Alice', 4, 'Biology', 66),
(6, 2, 'Bob', 1, 'Math', 8),
(8, 2, 'Bob', 3, 'Chemistry', 68),
(9, 2, 'Bob', 4, 'Biology', 99),
(10, 3, 'Charlie', 1, 'Math', 77),
(11, 3, 'Charlie', 2, 'Physics', 66),
(12, 3, 'Charlie', 3, 'Chemistry', 87),
(13, 3, 'Charlie', 4, 'Biology', 99),
(14, 4, 'David', 1, 'Math', 79),
(15, 4, 'David', 2, 'Physics', 11),
(16, 4, 'David', 3, 'Chemistry', 67),
(17, 4, 'David', 4, 'Biology', 100),
(18, 5, 'Eve', 1, 'Math', 79),
(19, 5, 'Eve', 2, 'Physics', 11),
(20, 5, 'Eve', 3, 'Chemistry', 67),
(21, 5, 'Eve', 4, 'Biology', 100),
(22, 6, 'Frank', 1, 'Math', 9),
(23, 6, 'Frank', 2, 'Physics', 100),
(24, 6, 'Frank', 3, 'Chemistry', 67),
(25, 6, 'Frank', 4, 'Biology', 100);
# 每门学科的第一名,有并列的情况一起就一起展示
SELECT*
FROM( SELECT *, DENSE_RANK() over ( PARTITION BY course_id ORDER BY source DESC ) AS num FROM student_scores ) xx
WHERExx.num <=1;#每个人不同学科中的最高分
SELECT*
FROM( SELECT *, DENSE_RANK() over ( PARTITION BY student_id ORDER BY source DESC ) AS num FROM student_scores ) xx
WHERExx.num <=1;#每门学科的平均分
SELECTcourse_name,courseAvg
FROM( SELECT *,avg(source) as courseAvg, ROW_NUMBER() over ( PARTITION BY course_id ORDER BY source DESC ) AS num FROM student_scores GROUP BY course_id ) xx ;#每人课程得分高于课程平均分的数量
SELECTstudent_name,SUM(CASE WHEN source > courseAvg THEN 1ELSE 0END) as 及格数
FROM( SELECT *,avg(source) over(PARTITION by course_id ) as courseAvg FROM student_scores GROUP BY course_id,student_id ) xx GROUP BY xx.student_id
相关文章:
MySql8.x---开窗函数
1、定义 语法结构: ** 开窗函数|聚合函数 over([分组函数] [排序函数] [自定义窗口]) ** 分组函数:partition by ...,根据指定的字段对表分组,分组字段可以有多个。省略时表示整个表为一组。 排序函数:order by ...&…...
图文讲解HarmonyOS应用发布流程
HarmonyOS应用的开发和发布过程可以分为以下几个步骤:证书生成、应用开发、应用签名和发布。 1. 证书生成: 在开始开发HarmonyOS应用之前,首先需要生成一个开发者证书。开发者证书用于标识应用的开发者身份并确保应用的安全性。可以通过Har…...
【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)
原文链接: https://tecdat.cn/?p37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预…...
经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真
经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真 ADS工程下载:经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真-ADS工程 参考论文: An Efficient Broadband Reconfigurable Power Amplifier Using Active Load…...
Web开发:基础Web开发的支持
创建项目: 添加依赖: <?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://mav…...
【LeetCode每日一题】——LCR 168.丑数
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 优先队列 二【题目难度】 中等 三【题目编号】 LCR 168.丑数 四【题目描述…...
Day7 | Java框架 | SpringMVC
Day7 | Java框架 | SpringMVC SpringMVC简介SpringMVC 概述入门案例入门案例工作流程分析Controller 加载控制与业务bean加载控制(SpringMVC & Spring)PostMan 请求与响应请求映射路径请求方式(不同类型的请求参数)࿱…...
【网络通信基础与实践第二讲】包括互联网概述、互联网发展的三个阶段、互联网的组成、计算机网络的体系结构
一、互联网概述 计算机网络是由若干节点(node)和连接这些节点的链路(link)组成。 网络之间还可以通过路由器互联起来,这就构成了一个覆盖范围更大的计算机网络。这样的网络称为互联网。 网络把许多计算机连接在一起…...
CentOS7下安装Ruby3.2.4的实施路径
一、CentOS版本 [userzt ~]$ cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31" CPE…...
Redis 实现原理或机制
Redis 是一个高性能的、基于内存的键值对存储系统,广泛用于缓存、会话管理、排行榜和消息队列等场景。它的高效性得益于其独特的实现原理和机制,Redis支持丰富的数据结构和多种持久化、复制、集群和发布/订阅功能,提供了灵活性和高可用性。 …...
使用程序方式获取与处理MySQL表数据
8.1 执行多条语句获取 MySQL 表数据 8.1.1 MySQL 中的常量 8.1.2 MySQL 中的变量 1.用户变量 用户可以在表达式中使用自己定义的变量,这样的变量称为用户变量。 用户变量在使用前必须定义和初始化,如果使用没有初始化的变量&#x…...
计算机网络(五) —— 自定义协议简单网络程序
目录 一,关于“协议” 1.1 结构化数据 1.2 序列化和反序列化 二,网络版计算器实现准备 2.1 套用旧头文件 2.2 封装sock API 三,自定义协议 3.1 关于自定义协议 3.2 实现序列化和反序列化 3.3 测试 三,服务器实现 3.1…...
开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十七)
一、前言 本篇文章将在v100单卡服务器上,使用unsloth去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 使用unsloth能够使模型的微调速度提高 2 - 5 倍。在处理大规模数据或对时间要求较高的场景下,…...
[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):138 标注数量(xml文件个数):138 标注数量(txt文件个数):138 标注类别…...
Delphi 的 RSA 库 LockBox
LockBox 是用于 Delphi 的一套加密/解密控件 最早是一套商业控件,后来开源了。再后来,又有一个新版本的 LockBox,和旧版本完全不同。 旧版本的 LockBox 叫 LockBox 2;新版本的叫 LockBox 3。 这两个控件,都可以通过…...
element UI学习使用(1)
https://element.eleme.cn/2.6/#/zh-CN/component/container vue模块库,可复制直接使用 1、搜索框、下拉搜索框 <el-form :inline"true" class"demo-form-inline"><el-form-item label"结果搜索"><el-inputplaceho…...
如何搞定日语翻译?试试这四款工具
写一篇字数800-1000字的软文,用翻译新手的角度分享福昕翻译在线、福昕翻译客户端、海鲸AI翻译以及彩云翻译在翻译日语时候的表现,要求口语化表达。 最近对于一些轻小说突然感兴趣了,所以我开始尝试各种翻译工具来帮助我搞定日语翻译。今天&am…...
【STM32】独立看门狗(IWDG)原理详解及编程实践(上)
本篇文章是对STM32单片机“独立看门狗(IWDG)”的原理进行讲解。希望我的分享对你有所帮助! 目录 一、什么是独立看门狗 (一)简介 (二)、独立看门狗的原理 (三)、具体操…...
前端框架大观:探索现代Web开发的基石
目录 引言 一、前端框架概述 二、主流前端框架介绍 2.1 React 2.1.1 简介 2.1.2 特点 2.1.3 代码示例 2.2 Vue.js 2.2.1 简介 2.2.2 特点 2.2.3 代码示例 2.3 Angular 2.3.1 简介 2.3.2 特点 2.3.3 代码示例 三、其他前端框架与库 四、前端框架的选择 五、结…...
16 训练自己语言模型
在很多场景下下,可能微调模型并不能带来一个较好的效果。因为特定领域场景下,通用话模型过于通用,出现多而不精。样样通样样松;本章主要介绍如何在特定的数据上对模型进行预训练; 训练自己的语言模型(从头开…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
