分享好友 最新动态首页 最新动态分类 切换频道
实用sql技巧,开窗函数
2024-12-29 12:33

最近在牛客解sql题目时,经常有一类题目要求对表中的某一列进行排序

实用sql技巧,开窗函数

在查看提供的题解时经常看到使用开窗函数的解决方案

虽然不用开窗函数也能通过子查询的方式获取正确答案,但是

比较复杂难以理解

所以很有必要学习

第1行表示id为1的用户通过了4个题目;

第6行表示id为6的用户通过了4个题目;

思考

​ 题目只有一张表,两个字段,看似很简单

​ 如果没有t_rank要组合的话只需要

 

​ 但我们现在需要组合出t_rank,

在不使用开窗函数情况下的解题思路

我开始时想通过聚合函数构造一个字段,但事情并不简单,需要得出排名并非能够通过一个聚合解决

需要使用通过子查询来得出排名的值

具体实现(参考该题的第一名的解答

要得到通过题目的排名,比如你通过了8分,,你同学a也通过了8分,找到大于等于你的成绩,一个9分,一个8分,一个8分,去重复,就一个9,一个8,count一下总数,第2名,如果有三个同学通过了7个呢,同理,9,8,8,7,7,7 后面比这个少的,已经死在了筛选条件,去重,9,8,7,count=3

确实,如果我们得了10分,没有人超过我们,那么找到大于等于我的成绩,及10,count一下就是1了,即第一名

故总结为

 

如此,加上最初的那句简单sql,即可以得出本题的一种答案

 
 

显然这个逻辑还是有一点复杂的

下面先显示使用开窗函数的答案

 

这个答案也可以达到一样的效果

这个sql语句则简洁很多,现在需要理解的就只是这个开窗函数了

前言:老版本的mysql并不支持开窗函数,如需使用请使用mysql8以上的版本

开窗函数的定义

 

开窗函数与聚合函数

 

开窗函数的使用

​ 从开窗函数的定义中,可以了解到开窗函数比普通的聚合函数更加的灵活,功能也更加强大。但并不是很好理解,那么先从它的使用开始吧

 

开窗函数的一个概念是当前行,当前行属于某个窗口,窗口由
over关键字用来指定函数执行的窗口范围,如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,开窗函数基于所有行进行计算;如果不为空,则有三个参数来设置窗口

partition by子句

按照指定字段进行分区,两个分区由边界分隔,开窗函数在不同的分区内分别执行,在跨越分区边界时重新初始化。

order by子句

按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和partition by子句配合使用,也可以单独使用。

frame子句

当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。

常用的开窗函数

这里直接在官网查了一下,网址如下MySQL :: MySQL 8.0 Reference Manual :: 12.21.1 Window Function Descriptions

以上大部分函数的使用效果用例都可以在上面的官网中看到示例

下面是在实际中的使用

如上面的原题

​ 分析其开窗函数的含义

 

突然发现了新东西貌似比较有趣,明天接着更

构造一张表,在其中插入一些信息

 
 
 

我们先利用几个开窗函数中的排名函数来测试一下

 
 
 

再测试一下计算累计分布值,和Bucket number的开窗函数

我先查一下bucket number,发现网上并没有这个东西的准确信息,只能在官网里看其定义了

以上表的数据测试一下

 

Window关键字的用法可以参考

MySQL8中的关键字window与窗口函数_程序员先森的博客-CSDN博客

测试

 
 
 

通过partition by 关键字确定开窗函数的分区

 
 
 

官网的介绍:MySQL :: MySQL 8.0 Reference Manual :: 12.21.3 Window Function Frame Specification

与窗口函数一起使用的窗口的定义可以包括Frame子句。 Frame是当前分区的子集,Frame子句指定如何定义子集。

Frame是相对于当前行确定的,这使得Frame能够根据当前行在其分区内的位置在分区内移动。

例子: 通过将一个框架定义为从分区开始到当前行的所有行,您可以计算每行的运行总数。

​ 通过将框架定义为在当前行的任一侧扩展 N 行,您可以计算滚动平均值。

官网的介绍很复杂,这里有一篇更优秀的文章可以参考

最新文章
如何让百度快速收录网站内容?
还是那句话,只要坚持,总会被青睐的。做搜索引擎推广,不可能做完马上见效的,seo是需要时间的,可能你前几天做的事情,过几天百度才会知道。1、网站内部做好。怎么做好?这个问题问的深奥啊,我怎么知道你的网站有没有做好,你的网站我又
虚拟偶像影视动画制作软件(虚拟偶像影视动画制作软件哪个好)
摘要:虚拟偶像影视动画制作软件,虚拟偶像影视动画制作软件现如今,随着科技的迅猛发展,人们对于数字化、虚拟化、智能化工具的需求日益增加。在影视动画行业,虚拟偶像已经成为了一种趋势,不少影视公司纷纷尝试推出自己的虚拟偶像,同时
漫蛙漫画官网入口最新版软件亮点
漫蛙漫画官网入口最新版下载是一款专为漫画爱好者打造的阅读软件。它汇集了丰富的漫画资源,包括各种题材和风格的作品,满足用户的多样化需求。软件界面简洁友好,操作便捷,支持离线下载,让用户随时随地畅享漫画世界。同时,漫蛙漫画还提
一款具有创新性和趣味性的 AI 换脸应用,可让用户体验到摸胸的感觉
AI 换脸技术是近年来计算机视觉和人工智能领域的热门话题,它可以将一个人的脸替换到另一个人的身上,从而实现换脸的效果。而今天我要向大家介绍的是一款具有创新性和趣味性的 AI 换脸应用,它不仅可以让用户体验到换脸的乐趣,还可以让用
【现身】传苹果将推10.8英寸OLED iPad Air;Vision Pro现身中国监管数据库;美格纳中国区总部开业,专注OLED显示驱动芯片等领域
1.美格纳中国区总部在合肥开业,专注OLED显示驱动芯片等领域2.南京高端软件及信息服务产业融合集群专项资金项目,芯视界、芯行纪等上榜3.苹果Vision Pro设备已现身中国监管数据库4.传苹果将推10.8英寸OLED iPad Air5.日本住友重工将推出SiC
全球十大搜索引擎排名,Google高居榜首
【全球十大搜索引擎排名】Google全球市场份额为68%,高居榜首。雅虎第二,市场份额为7%,百度第三,市场份额为6.5%,微软第四,市场份额为 3%,其它依次为eBay、NHN、Yandex、Facebook、Ask和阿里巴巴。另:中国是全球第二大搜索市场,所占
Python爬虫实战,完整的思路和步骤(附源码)
小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站。 本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法。 环境介绍: python 3.6 pycharm requests re json 爬虫的
搭建你的网站:Wordpress网站建设指南 – 外贸网站建设,Wordpress网站建设,外贸建站公司,外贸独立站,Wordpress成品网站
在这个数字化时代,拥有一个具有吸引力和易用性的网站对于个人和企业而言变得越来越重要。而WordPress作为一个流行的网站建设工具,无疑是许多人首选的选择。今天,我们将向您介绍如何搭建属于您自己的网站,让您在网上展示自己的独特风采
【8735(移动版)腾讯手机管家下载】酷派8735 移动版腾讯手机管家16.1.19免费下载
腾讯手机管家专注手机骚扰拦截,动态守护手机安全,深度清理微信、QQ缓存,让手机体积减半,拒绝卡慢。---认真服务---【骚扰拦截】智能拦截骚扰电话,过滤诈骗垃圾短信【清理加速】清理加速能力升级,释放空间告别卡慢【微信清理】个性清理
哪些因素会影响车价计算器的结果?
车价计算器的结果会受到多种因素影响。 贷款金额由车辆价格和首付款比例决定,首付款高贷款金额就低。 贷款利率很关键,不同金融机构和贷款方案利率有差异,利率高还款总额大。 贷款期限也重要,长的每月还款额低但总利息多,短的每月还款
相关文章
推荐文章
发表评论
0评