mysql窗口函数排名查询 与 连续出现的数字查询

排名查询

学会这一个查询,我们应该对该类型的查询 方法就能有一个了解,不然 如果下次遇到该类型的查询,我们依然分析不出

给你一张表,里面有id 和score字段,根据score的分数大小 排序 ,假如有相同的分数,按照相同的次序进行排行 

例子如下

该decimal 参数代表的 是  精度,(5,3)代表该数字只能有五个,包括小数点后面的,3代表小数点后面只能有三个  意思该 字段的范围在 -99.999 到99.999  如果是(5,0) 代表着只能是整数,且没有小数点   

插入的数据如下

查询到的例子如下

分析

首先 我们先查询到 score字段的所有值,然后按照降序排列,然后再看右边的rank字段,我们显然需要对我们的Scores 表进行分表的查询,问题是怎么得到 该每个字段的排名,正常的排名的话 

会根据 id 等按照顺序查询,但是这样显然得不到我们想要的结果  

我们可以分出来一个表 命名为s2  然后让s2表中的所有字段 跟s1表的所有字段进行 统计,如果s2的字段值大于等于s1的字段值 就count大于等于s1字段值的个数,根据count出来的个数进行排序就可以了 ,这样说可能比较抽象   我们举个例子  

举例

现在 我们有两张表  s1  s2 两张表的数据是相同的  ,对于s1 表中的score 分为5 的进行比对,s2表中发现大于等于s1表中的score 为5 的只有 一个 5 ,那么他count出来的数据就是1 ,而对于4.5 ,s2表中大于等于s1表中4.5的数据只有 5 和4.5 那么他count 出来的数据 就是 2   ,但是 有 两个3.5的情况下,大于等于3.5的值有5个,跟排名4不同,那么 我们就可以去重处理

sql语句

select s1.score,(
select  count( distinct s2.score) from Scores s2 where s2.score>=s1.score
    )as 'rank'
from Scores s1 order by  s1.score desc;

用窗口函数完成查询 

用窗口函数 也能达到类似的效果  

SELECT
    S.score,
    DENSE_RANK() OVER (
        ORDER BY S.score DESC
        ) AS 'rank'
FROM
    Scores S
ORDER BY
    S.score DESC;

如果是rank()窗口函数的话 排行就会变成

发现 会跳过5 这个排行

连续出现的数字 

给你一张logs表,查询同一个数字连续出现3次以上的 数字,注意是 连续出现三次以上

该情景也用到 球员得分排名,比如连续得分三次的球员名称等场景

查询结果应该如下

分析

1.三表联查

连续三次出现的情况,我们可以视为 一个数字的id 是升序的,而且他连续出现 ,那么他第一次出现的id =第二次出现的id-1,第二次出现的id 等于第三次出现的id-1,用3表联查 就可以,但这也是效率最低的情况

2.lead ()窗口函数

lead()窗口函数 的意思 就是  

将数据 往下 平移生成一个新的字段 , 我们直接看代码与具体实例 ,

表中的数据还是上文的表数据 

select num,
       lag(num,1)over() as a,
       lag(num,2)over () as b  from Logs
    as c

我们查询的出来数据如下

我们把 每一个数据 往下平移 ,比如说 第二行的原始数据1  .第一行向下平移就是a 列 内容为1,因为b列向下平移两次,而num所在对应只有第一行有数据,所以b列为空

然后以此组装生成了一个新的表 c  ,我们对表c的数据 进行 列内容的对比,去重就可以了

select  distinct c.num as ConsecutiveNums
from( select num,
             lag(num,1)over() as a,
             lag(num,2)over () as b  from Logs
    )as c
where c.num=c.a and c.b=c.a;

查询结果 

还有一个窗口函数row_number()窗口函数也是类似于该窗口函数的原理一样,生成一个新的表,对比一下,得出结论

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

狗都能看懂的DBSCAN算法详解

文章目录 DBSCAN简介DBSCAN算法流程运行机制举个实例 DBSCAN算法特点DBSCAN参数选取技巧 ϵ \epsilon ϵ的选取:找突变点MinPts的选取 DBSCAN简介 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的…

构筑卓越:建筑企业如何通过GB/T 50430:2017认证铸就质量管理基石

在建筑业这片充满挑战和机遇的战场上,企业资质犹如一面旗帜,标志着企业的实力和信誉。GB/T 50430:2017《工程建设施工企业质量管理规范》的实施,成为了建筑企业提高管理水平、赢得市场竞争的重要武器。 GB/T 50430:2017的战略意义 GB/T 5043…

Pixea Plus for Mac:图像编辑的极致体验

Pixea Plus for Mac 是一款专为 Mac 用户设计的强大图像编辑软件。凭借其卓越的性能和丰富的功能,它为用户带来了前所未有的图像编辑体验。无论是专业的设计师,还是业余的摄影爱好者,Pixea Plus 都能满足您对于图像编辑的各种需求。 Pixea P…

Promise入门详解

文章目录 Promise 的介绍和优点(为什么需要 Promise?)Promise 的基本使用Promise 的状态和回调函数Promise 对象的 3 种状态 Promise 的回调函数Promise的状态图: new Promise() 是同步代码Promise 封装定时器Promise 封装 Ajax 请…

2024/06/24(11.1115)指针进阶

1.字符指针 2.数组指针 3.指针数组 4.数组传参和指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 9.指针和数组一些题目的解析 字符指针 char* 我们用这种方法修改了*pch的内容从"A"变成了"a" 存储内容是什么一般指针就…

浏览器扩展V3开发系列之 chrome.storage 的用法和案例

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.storage 是用于存储、获取用户数据的 API。当我们需要持久化存储数据时,比如&…

无忧易售升级:一键设置图片分辨率,赋能十大跨境电商平台

在电商领域,产品图片的品质直接影响着顾客的购买决策与品牌形象的塑造。无忧易售ERP特推出图片分辨率修改功能,为电商卖家们提供更专业的图像优化工具,让每一像素都成为吸引客户的秘密武器! 一、Allegro、OZON、Coupang、Cdiscou…

低成本STC32G8K64驱动控制BLDC开源入门学习方案

低成本STC32G8K64驱动控制BLDC开源入门学习方案 ✨采用STC32G8K64单片机,参考梁工的STC32G12K128-LQFP48驱动方案制作,梁工BLDC相关的资料:https://www.stcaimcu.com/forum.php?modviewthread&tid7472&extrapage%3D1,在此…

如何编写时区源文件

0、背景 ① 修改TZ环境变量改变时区不能立即生效。要求设置时区后立即生效,只能用修改/etc/localtime方式。 ② 原文作者 Bill Seymour,想要查看原文,点击官网地址https://www.iana.org/time-zones下载 zic 源码,源码目录中的 tz…

[leetcode] smallest-k-lcci. 最小的k个数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> smallestK(vector<int>& nums, int k) {int L 0, R nums.size() - 1;while (L < R){int left L, right R;int key nums[left];while (left < right){while (left &l…

XX能源云数据平台建设项目_投标书_技术部分(194页word)

标书介绍&#xff1a; 该标书通过物联网技术&#xff0c;实时采集能源行业各类数据&#xff0c;并进行标准化整合。采用分布式存储技术&#xff0c;确保数据的安全性和可扩展性。运用大数据和人工智能技术&#xff0c;对数据进行深度分析和挖掘&#xff0c;提供有价值的业务洞…

鉴权开发框架Django REST framework的应用场景

目录 一、鉴权开发框架介绍二、Django REST framework是什么三、如何实现认证、权限与限流功能四、Django REST framework的应用场景 一、鉴权开发框架介绍 鉴权开发框架是一种用于实现身份验证和授权的软件开发工具。它可以帮助开发者快速构建安全、可靠的身份验证和授权系统…

AI大模型训练过程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 大模型训练概述 AI大模型训练是指在海量数据中&#xff0c;对拥有数百万至数千万参数及深层次神经网络结构的模型进行训练的过程。这类大模型因其庞大的参数规模和复杂的网…

利用LabVIEW和数字孪生技术实现PCB电路板测试

利用LabVIEW和数字孪生技术对PCB电路板进行测试&#xff0c;可以通过动画展示实现测试过程的生动、形象和直观。本文详细说明了如何结合LabVIEW与数字孪生技术进行PCB电路板的测试&#xff0c;包括系统架构、实现方法以及具体展示效果&#xff0c;适合对外展示。 在现代电子制造…

Redis安装与使用

目录 1、介绍 1、redis的特点: 2、缓存 2、安装Redis 1、安装单机版redis 2、redis-cli命令参数 3、清空数据库的两种方式和作用域&#xff1a; 4、redis的增删查改命令 5、redis的查看所有分类命令 6、redis过期时间与控制键的行为 7、redis的相关工具 1、介绍 r…

如何成为专业的 .NET 开发人员

如今&#xff0c;网上有大量信息&#xff0c;找到正确的信息并非易事。当你开始编程之旅并希望获得全面的指南时&#xff0c;最好寻找一个可以指导你完成整个过程的指南。 本文将帮助您制定一份路线图&#xff0c;告诉您什么是重要的以及什么是需要学习的. 一.一切从软件基础…

CSS|03 尺寸样式属性文本与字体属性

尺寸样式属性 height:元素高度height的值&#xff1a;auto 自动length 使用px定义高度% 基于包含它的块级对象的百分比高度 width&#xff1a;元素的宽度width的值与height一样span标签可以设置宽度、高度吗&#xff1f; 答&#xff1a;不可以&#xff0c;因为span标签是一个行…

机器人控制系列教程之动力学建模(1)

简介 机器人动力学是对机器人机构的力和运动之间关系与平衡进行研究的学科。机器人动力学是以机器人运动为基础&#xff0c;研究在运动过程中连杆与连杆之间、连杆与工件之间力或力矩等关系。 分类&#xff1a; 根据研究方向的不同&#xff0c;机器人的动力学分析也分为正、逆…

华为OD机试 - 掌握单词个数(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

一文搞懂Linux多线程【下】

目录 &#x1f6a9;多线程代码的健壮性 &#x1f6a9;多线程控制 &#x1f6a9;线程返回值问题 &#x1f6a9;关于Linux线程库 &#x1f6a9;对Linux线程简单的封装 在观看本博客之前&#xff0c;建议大家先看一文搞懂Linux多线程【上】由于上一篇博客篇幅太长&#xff0c;为…