SQL开窗函数之percent_rank、first_value、nth的用法

news2024/11/18 21:30:00

开窗函数

当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询。窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列值和聚合后的结果列

常见运用场景: 对班里同学成绩进行排序

常见的窗口函数
在这里插入图片描述

开窗函数基本形式

func_name(<parameter>) 
OVER(
[PARTITION BY <part_by_condition>] 
[ORDER BY <order_by_list> ASC|DESC]
[rows between ?? And ??]
)

具体字段的解释看我的上一篇:SQL开窗函数之基本用法和聚合函数


分布函数

percent_rank(): 按公式(rank-1)/(row-1)进行计算
应用场景:不常用

cume_dist(): 获取组内小于等于当前rank值的行数/分组内总行数
应用场景:查询小于当前薪资的比例

e.g. Sales表
在这里插入图片描述

select *, 
rank() over(order by sales) as ranking,
percent_rank() over(order by sales) as percent_ranking,
cume_dist() over(order by sales) as cume 
from Sales

在这里插入图片描述


头尾函数

头尾函数 first_value()last_value() 主要用于获取分组字段内的第一个值或最后一个值,部分情况下相当于 maxmin
应用场景: 查询部门最早发生销售记录日期和最近发生的销售记录日期

e.g. 成绩表
在这里插入图片描述

select *,
first_value(score) over(partition by cid),
first_value(score) over(partition by cid order by score),
last_value(score) over(partition by cid), 
last_value(score) over(partition by cid order by score) 
from sc;

在这里插入图片描述

Ntile函数

NTILE()函数用于将分区中的有序数据分为n个等级,记录等级数

NTILE(n) 
OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

Ntile(n)表示分成了n组

e.g. 成绩表
在这里插入图片描述

  • 把学生成绩分成2组和3组
select *,
ntile(2) over(order by score desc) as 2_tile,
ntile(3) over(order by score desc) as 3_tile,
from sc;

在这里插入图片描述

  • 把成绩按cid分成2组和3组
select *,
ntile(2) over(partition by cid order by score desc) as 2_tile_group,
ntile(3) over(partition by cid order by score desc) as 3_tile_group
from sc;

在这里插入图片描述

应用:选取薪水前50%的员工
Employee表
在这里插入图片描述

思路:

  1. 先给员工薪水分成2组进行排序
  2. 筛选薪水前50%的员工的序号
-- 先给员工薪水分成2组
select *, 
ntile(2) over(order by salary) as ranks 
from employees

在这里插入图片描述

-- 筛选薪水前50%的员工的序号
select * from (
	select *, ntile(2) over(order by salary) as ranks from employees
) t
where ranks = 2

在这里插入图片描述


nth_value函数

nth_value()函数用于返回分组内到当前行的第N行的值。如果第N行不存在,则函数返回NULL。
N必须是正整数,例如1,2和3。

应用场景: 查询第N名的同学信息
基本形式:

NTH_VALUE(expression, N)
OVER (
	[PARTITION BY <part_by_condition>] 
	[ORDER BY <order_by_list> ASC|DESC]
	[rows between ?? And ??]
)

NTH_VALUE(expression, N) 表示在 expression 里第 N

e.g. 成绩表
在这里插入图片描述

select *,
nth_value(score, 1) over(partition by cid order by score desc) as 1th,
nth_value(score, 2) over(partition by cid order by score desc) as 2th,
nth_value(score, 3) over(partition by cid order by score desc) as 3th
from sc;

在这里插入图片描述

select *,
nth_value(score, 1) over(partition by cid) as 1th,
nth_value(score, 2) over(partition by cid) as 2th,
nth_value(score, 3) over(partition by cid) as 3th
from sc;

在这里插入图片描述

应用:获取各班分数第一名的同学id

在这里插入图片描述

思路:

  1. 先给个班的分数排序,获取第一名的分数
  2. 根据分数获取第一名同学的信息
-- 先获取每个班第一名的分数
select *, 
nth_value(score,1) over(partition by cid order by score desc) as 1th_score 
from sc;

在这里插入图片描述

-- 根据分数获得同学信息
select sid, cid, score from (
    select *, 
    nth_value(score,1) over(partition by cid order by score desc) as 1th_score 
    from sc) t
where score=1th_score

在这里插入图片描述


参考来源:
MySQL模块:开窗函数
SQL中开窗函数first_value() 和 last_value()
MySQL8中的开窗函数

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

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

相关文章

微信小程序|反编译

一、下载网易模拟器 MuMu模拟器官网_安卓模拟器_网易手游模拟器 根据自己的系统选择对应的软件进行安装。 安装成功后,如下: 二、再模拟器上面安装对应的软件(微信、RE文件管理器) 1. 打开应用中心,搜索 RE文件管理器和微信,分别进行下载 2. 打开微信,输入帐号进行…

Windows 文件比较工具winmerge

今天下载了一个非常强大的文件比较工具推荐给大家。开源免费的&#xff01;&#xff01;&#xff01; 什么是WinMerge&#xff1f; WinMerge是Windows的开源差异和合并工具。WinMerge 可以比较文件夹和文件&#xff0c;以易于理解和处理的可视文本格式呈现差异。 官方下载地…

代码随想录算法训练营第六十天| LeetCode84. 柱状图中最大的矩形

一、LeetCode84. 柱状图中最大的矩形 1&#xff1a;题目描述&#xff08;84. 柱状图中最大的矩形&#xff09; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大…

学习Typescript(第二弹)

接口 对象类型接口 先用interface定义一个List接口,成员有id时number类型&#xff0c;name是string类型再定义一个Result&#xff0c;成员是List数组定义一个render函数&#xff0c;接收参数是result // 先用interface定义一个List接口 interface List {id:number,name:strin…

安卓APP源码和设计报告——个人通讯录

摘 要 随着移动设备制造技术和移动通信网络的迅猛发展,全球手机用户日益增加,手机成为了很多人日常生活中必不可少的一部分,手机业在日益发展的同时,人们对手机的功能需求和体验需求也越来越高,因此各种智能手机相继而出&#xff0c;当前市场上最流行的智能手机的操作系统非An…

RabbitMQ--重试机制

原文网址&#xff1a;RabbitMQ--重试机制_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍RabbitMQ的重试机制。 问题描述 消费者默认是自动提交&#xff0c;如果消费时出现了RuntimException&#xff0c;会导致消息直接重新入队&#xff0c;再次投递&#xff08;进入队首&am…

【iOS】—— MVVM模式

MVVM模式 文章目录MVVM模式为什么使用MVVM&#xff1f;MVVM分别代表什么含义&#xff1f;MVVM通信关系MVVM模式的优缺点优点:缺点:概括总结MVVM文件分类为什么使用MVVM&#xff1f; iOS中&#xff0c;我们使用的大部分都是MVC架构。虽然MVC的层次明确&#xff0c;但是由于功能日…

C# 11新特性之file关键字

C#11 添加了文件作用域类型功能&#xff1a;一个新的 file 修饰符&#xff0c;可以应用于任何类型定义以限制其只能在当前文件中使用。这样&#xff0c;我们可以在一个项目中拥有多个同名的类。 目录示例file不可以与其他修饰符一起使用file可以修饰的类型file 不可修饰的类型f…

主流报表开发工具FastReport.Net全新发布,邀您体验最新版试用

FastReport .Net是一款适用于 WinForms、Blazor Server、ASP.NET、MVC、.NET 6 和 .NET Core 的报告生成工具。FastReport代表着“速度”、“可靠”和“品质”&#xff0c;是当今主流的报表开发工具。 该产品在本月进行了重大版本v2023的发布&#xff0c;接下来让我们一起看看…

【OpenCV-Python】教程:4-9 特征匹配 match

OpenCV Python 特征匹配 【目标】 特征匹配Brute-Force Matcher 和 FLANN Matcher 【理论】 Brute-Force Matcher字面意思是蛮力匹配器&#xff0c;所以它的过程也很简单&#xff0c;从一个集合里取出一个特征描述子&#xff0c;然后与第二个集合里的特征逐个的进行匹配比较…

传统MES架构的智能化改进---python在Aprol上的实践

一、开题依据 MES是属于生产车间级的管理信息系统。作为生产与计划之间的信息“集线器”&#xff0c;MES 主要包括以下功能模块&#xff1a;工序详细调度、资源分配和状态管理、生产单元分配、过程管理、人力资源管理、维护管理、质量管理、文档控制、产品跟踪和产品清单管理、…

Solidworks导出为URDF用于MoveIT总结(带prismatic)

环境 Solidwoks2018 SP0 / Solidwoks2021 SP5&#xff1b;Ubuntu20.04&#xff1b;ROS1 Noetic; Solidwoks2018 SP0对于平移副有问题&#xff0c;显示不出来&#xff0c;Solidwoks2021 SP5没有问题。 官网有段话&#xff1a; There is a known STL export bug with SolidWork…

Jdk Tomcat 安装教程 — 2022.12.11

文章目录一、安装jdk教程二、tomcat 安装三、修改Tomcat端口号安装Tomcat之前要确保安装jdk一、安装jdk教程 安装vim命令包&#xff0c;此操作如果执行不了&#xff0c;需要使用root权限执行 执行如下命令&#xff1a; yum install -y vim-enhanced2. 下载jdk安装包&#xff…

3D打印切片软件Cura入门

安装好之后&#xff0c;添加一台打印机&#xff0c;参数可以随便设置。 Cura安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1T1MBcZYBCVfhtFKDBjypmQ?pwd2022 提取码&#xff1a;2022 基本操作 按住鼠标右键不放&#xff1a;旋转 按住滚轮不放&#xff1…

制作USB启动盘(U盘安装ubuntu20.04)

文章目录制作USB启动盘&#xff08;U盘安装ubuntu20.04&#xff09;制作USB启动盘的工具ubuntu20.04系统安装u盘制作进入bios制作USB启动盘&#xff08;U盘安装ubuntu20.04&#xff09; 制作USB启动盘的工具 制作USB启动盘的工具有rufus&#xff0c;UNetbootin&#xff0c;Un…

汇编语言—第1章 各类存储芯片及内存空间

1、各类存储器芯片 一台PC机中&#xff0c;装有多个存储类芯片&#xff0c;这些存储器芯片从物理连接上来看是独立的、不同的器件。 &#xff08;1&#xff09;随机存储器 用于存放供CPU使用的绝大部分程序和数据 &#xff08;2&#xff09;装有BIOS&#xff08;Basic Input/Ou…

AI遮天传 DL-反馈神经网络RNN

本文会先介绍动态系统的概念&#xff0c;然后介绍两种简单的反馈神经网络&#xff0c;然后再介绍两种门控神经网络(LSTM, GRU)&#xff0c;最后是关于反馈神经网络的应用(本次以语音识别为例)。 RNN: Recurrent neural network&#xff0c;一般叫它“反馈神经网络”或者“循环神…

1565_AURIX_TC275_开关电源模式相关寄存器

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个寄存器可以设置开关电源的开关频率&#xff0c;之前在文档中看到过这个默认的数值是1.5M的频率&#xff0c;现在看来应该是这个1.56M的一个近似了。准确的数值不是1.5M而是1.56M。 1. …

任务四:标准化组织概览

标准化组织概览一、标准化组织1、ITU电信标准化部门无线电通信部门电信发展部门2、3GPP3、3GPP24、CCSA二、TDD-LTE与FDD-LTE系统的对比三、LTE技术特点及基本指标1、LTE主要技术特点2、峰值数据速率3、控制面延迟4、用户面延迟5、用户吞吐量6、频谱效率7、移动性8、覆盖9、频谱…

同事跳槽拿下阿里 P6Offer,程序员:会点基础还真不行

前阵子&#xff0c;同事程序员 H 偷偷的向阿里菜鸟投递了自己的简历... 不久后程序员 H 就收到了阿里菜鸟的面试通知&#xff0c;经历 5 轮面试&#xff0c;一举成功拿下 offer 并定级 P6。 小天趁着未来的阿里大佬还在身边&#xff0c;向程序员 H 讨教了一下面试阿里菜鸟的经…