SQL分组后取topN

news2024/10/6 1:44:15

准备数据

create table SC(
SId varchar(10) comment "学生ID",
CId varchar(10) comment "课程ID",
score decimal(18,1) comment "课程成绩");

insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

1、TOP 1

求每门课程中成绩最好的人

使用窗口函数:

SELECT SId ,CId,score from (
SELECT SId,CId,score,dense_rank() over (partition by CId ORDER BY score desc) as ranking from sc ) new 
where ranking=1

2、TOP N

求每门课程成绩前两人

使用窗口函数:

SELECT SId,CId,score from (
SELECT SId,CId,score,rank() over (PARTITION by CId ORDER BY score DESC) as ranking
from sc ) b
where ranking<=2;

3、三种排名的方式

#这是代码
SELECT SId,CId,score,
row_number() over (partition by CId ORDER BY score desc) as row_number2,
rank() over (partition by CId ORDER BY score desc) as rank2,
dense_rank() over (partition by CId ORDER BY score desc) as dense_rank2
from sc
where CId = "01";

这是对CID分组,按分数排名的表

上图中3中不同的排名方式,对应sql窗口函数的三种

row_number : 就是按1-2-3顺序排

rank:就是按 1-1-3 排列--这就是 美国式排名

dense_rank:就是按 1-1-2-2-3排列--这就是中国式排名

请牢记这三种排名哦!!!

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

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

相关文章

用最少数量的箭引爆气球【贪心算法】

用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…

Debian12 Gnome环境下的办公软件安装

一、禁用Wayland&#xff0c;启用xorg 当前Debian12 默认采用Wayland来支持gnome环境&#xff0c;但是许多软件无法在该系统下显示&#xff0c;例如&#xff1a;openoffice&#xff0c;yozo-office&#xff0c;weixin&#xff0c;fcitx。所以要在gdm3的配置文件中&#xff0c;…

港交所MMDH行情协议

目录 一、交易时间 二、MMDH与OMD的差异 三、MMDH消息类型 四、MMDH的市场快照数据 内地市场数据枢纽-证券市场(OMD-MMDH) 港交所OMD-C对接笔记 - skylerjiang - 博客园 (cnblogs.com) 一、交易时间 图 1 港交所交易时间段 图 2 消息序列 二、MMDH与OMD的差异 图 3 标准…

Leetcode213 打劫家舍2

思路&#xff1a;既然头尾不能同时取&#xff0c;那就分别算只取头或者只取尾&#xff0c;不考虑特殊情况的话是一个简单的动态规划 class Solution:def rob(self, nums: list[int]) -> int:if len(nums) < 3:return max(nums)max_sum [nums[0], max(nums[1], nums[0])…

IC芯片老化测试以及方案详解

芯片老化试验是一种对芯片进行长时间运行和负载测试的方法&#xff0c;以模拟芯片在实际使用中的老化情况。 1. 目的&#xff1a;芯片老化试验的目的是评估芯片在长时间使用和负载情况下的可靠性和性能稳定性&#xff0c;以确定其寿命和可靠性指标。 2. 测试方案设计&#xff1…

软件测试/测试开发丨Python 内置库 正则表达式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27058 python 内置库 正则表达式 目录 正则表达式使用re模块实现正则表达式操作 正则表达式 正则表达式就是记录文本规则的代码可以查找操作符合某些复…

大屏开发,浏览器的可视区域和设备的分辨率

在线屏幕检测 - 显示器检测 - 显示器坏点检测工具

趣解装饰者模式之《我想吃煎饼果子了》

〇、小故事 话说最近早起没时间做早饭&#xff0c;并且早上上班的地铁口不远处就有一处非常火爆的煎饼摊&#xff0c;所以我就经常去那边吃煎饼&#xff0c;一个“基础版”煎饼是7块钱&#xff0c;向煎饼中加一颗鸡蛋是1元钱&#xff0c;加一根火腿肠是3元钱&#xff0c;加鸡柳…

【算法日志】动态规划刷题:不相邻选择类问题(day40)

算法随想录刷题60Day 目录 前言 打家劫舍1 (数组) 打家劫舍2&#xff08;环形数组&#xff09; 打家劫舍3&#xff08;二叉树&#xff09; 前言 今天主要讨论不相邻选择类问题&#xff0c;会在不同数据结构题型的下探讨该类问题的解法。 打家劫舍1 (数组) 本题只需要讨论当…

微信开发之朋友圈自动评论的技术实现

简要描述&#xff1a; 朋友圈评论 请求URL&#xff1a; http://域名地址/snsComment 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wI…

炒股10倍杠杆软件是什么?出现账户安全问题怎么办?有三个方法解决

炒股10倍杠杆软件是指一种用于股票交易的杠杆交易软件&#xff0c;可以将投资者的交易资金进行多倍放大&#xff0c;以获得更高的投资回报。然而&#xff0c;使用杠杆交易软件也伴随着一些账户安全问题&#xff0c;因此&#xff0c;本文将介绍三个方法来解决这些问题。 一、加…

C语言面试题-指针

#include <stdio.h> int main() {char str1[] "hello bit.";//地址不同char str2[] "hello bit.";const char* str3 "hello bit.";//常量是不可以被修改的const char* str4 "hello bit.";//常量是不可以被修改的if (str1 s…

臻图信息以数字孪生技术推动智慧小区数字化建设

伴随着智慧城市建设进程的加速发展&#xff0c;加速传统小区的管理与服务向智能化升级转型。运用智慧化的管理和服务&#xff0c;利用信息技术和物联网等技术手段&#xff0c;将传统的居住区域与智能设备相结合&#xff0c;实现楼宇、社区设施、服务管理的数字化、网络化、智能…

为什么中国软件需要国产化?

国产化是指技术引进项目投产后所生产的产品中&#xff0c;国内生产件的数量占整件产品生产件数量。换句话说&#xff0c;软件国产化的占比&#xff0c;直接影响到技术是否会在某一个时点上被”卡脖子“。 随着国家经济的发展和技术水平的提高&#xff0c;国家整体实力大大增强…

产品展示视频制作的要点

制作产品展示视频时通过精心策划的视频剧本和拍摄手法&#xff0c;可以准确地呈现活动的目的、主题和特点&#xff0c;让观众更好地理解和认同活动的意义。深圳产品活动视频制作公司老友记小编还为您整理了以下一些重要的制作要点&#xff1a; 1.明确目标受众&#xff1a;了解你…

博睿数据当选粤港澳大湾区金融创新研究院理事会单位,助力金融科技创新发展

近日&#xff0c;博睿数据当选粤港澳大湾区金融创新研究院理事会单位。这是对博睿数据在金融科技领域所取得成绩的高度认可&#xff0c;也是对其创新能力和发展潜力的充分肯定。 粤港澳大湾区金融创新研究院由粤港澳三地金融行业、高等院校高层和专家学者共同发起&#xff0c;经…

HarmonyOS ArkUI Canvas(你相信光吗?)

文章目录 前言一、Canvas是什么&#xff1f;二、画神光棒1.绘制神光棒左右侧2.中心圆形其他部分 总结 前言 昨天华为mate60提前发售&#xff0c;网上流传,麒麟9000s&#xff0c;“4G改””&#xff0c;“突破列强科技封锁”等字眼流传在各大社交平台&#xff0c;我对着那些mate…

ABB USC329AE01控制器模块

多通道控制&#xff1a; USC329AE01 控制器模块通常具有多个控制通道&#xff0c;可用于监测和控制不同的过程变量。 通讯接口&#xff1a; 这种模块通常支持各种通讯接口&#xff0c;如以太网、串口&#xff08;RS-232、RS-485&#xff09;、Profibus、Modbus 等&#xff0c;…

提高办公效率,离不开微服务平台框架的助攻!

如今&#xff0c;低代码技术平台获得了很多企业的青睐和喜爱&#xff0c;由于其灵活、易操作、好维护、能提质增效等优势特点&#xff0c;赢得了不少新老客户朋友的追捧。微服务平台框架是其中的一个重要功能&#xff0c;如果想要做好数据资源管理&#xff0c;提高办公协作效率…

提升方法AdaBoost算法

此算法就是一个学习&#xff0c;然后积累&#xff0c;再学习的方法。 大概流程是首先建立一个弱分类&#xff0c;然后计算其错误率&#xff0c;根据错误的样本数给样本分配权重&#xff0c;然后再根据这个样本权重去计算新的最小分类错误率&#xff0c;以此类推&#xff0c;直…