sqlserver巧用row_number和partition by分组取top数据
发布时间:2024-01-28 12:33:39
标签:row,number,partition
分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生。这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到。SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单。下面是一个简单示例:
--1.创建测试表
create table #score
(
name varchar(20),
subject varchar(20),
score int
)
--2.插入测试数据
insert into #score(name,subject,score) values('张三','语文',98)
insert into #score(name,subject,score) values('张三','数学',80)
insert into #score(name,subject,score) values('张三','英语',90)
insert into #score(name,subject,score) values('李四','语文',88)
insert into #score(name,subject,score) values('李四','数学',86)
insert into #score(name,subject,score) values('李四','英语',88)
insert into #score(name,subject,score) values('李明','语文',60)
insert into #score(name,subject,score) values('李明','数学',86)
insert into #score(name,subject,score) values('李明','英语',88)
insert into #score(name,subject,score) values('林风','语文',74)
insert into #score(name,subject,score) values('林风','数学',99)
insert into #score(name,subject,score) values('林风','英语',59)
insert into #score(name,subject,score) values('严明','英语',96)
--3.取每个学科的前3名数据
select * from
(
select subject,name,score,ROW_NUMBER() over(PARTITION by subject order by score desc) as num from #score
) T where T.num <= 3 order by subject
--4.删除临时表
truncate table #score
drop table #score
语法形式:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
解释:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)


猜你喜欢
- 本文实例讲述了Python实现的拟合二元一次函数功能。分享给大家供大家参考,具体如下:背景:使用scipy拟合一元二次函数。参考:HYRY
- 目录一、时间序列数据的生成二、Pandas设置索引三、 时间序列数据的截取四、Pandas重复值处理4.1 查询是否有重复值4.2 去除重复
- 阅读上一章:chapter 5 表单Chapter 6 <strong>,<em>与其他短语元素在引言和前面的章节中
- 效果展示效果展示素材展示一个为视频,另一个为像素大小不小于视频的封面。实现过程调用已启用的浏览器通过调用已启用的浏览器,可以实现直接跳过每次
- 提到分发请求,相信大多数人首先会想到Nginx,Nginx作为一种多功能服务器,不仅提供了反向代理隐藏主机ip的能力,还拥有简单的缓存加速功
- 一、find_in_set() 函数详解示例:select FIND_IN_SET('1', '1,2,3'
- python pyaudio音频录制安装所需要的包pip install pyaudio监听麦克风import pyaudioimport
- python中判断列表为空判断列表为空是一个非常基础的问题。但是也有很多写法。方法1:len()list = []if len(list)
- PyTorch创建自己的数据集图片文件在同一的文件夹下思路是继承 torch.utils.data.Dataset,并重点重写其 __get
- 图形检测在计算机视觉开发中是一项非常重要的操作,算法通过对图像的检测,分析出图像中可能存在哪些形状。除此之外,除了让计算机识别轮廓之外,轮廓
- 求英文字母、数字、下划线、汉字的js正则表达式英文字母或数字或下划线,英文字母数字下划线是:/^\w+$/汉字的是:/^[\u0391-\u
- 热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力。下面这段代码是制作热词图的,用到了以下技术:jieba,把
- 在迭代中enumerate比range更能灵活,一般情况下尽量用erumerate,下面举例说明:先来看range的使用:city_list
- 背景喵哥想在MFC中调用python脚本,在原来的代码中包含一个只支持x86的库文件(超级核心的文件),原本安装的python是x64的,强
- 这段时间常给来面试的同学用《 你是一个职业的页面重构工作者吗? 》中三个部分的不同阶段去做自测,发现很多人都自我感觉良好,给我的回答基本都是
- python time模块计算时间之间的差距练习题1. 当前月1号对应的0点的时间戳# 定义一个当前月分的一号0点字符串格式的时间 now_
- Oracle 的正规表达式的实施是以各种 SQL 函数和一个 WHERE 子句操作符的形式出现的。如果您不熟悉正规表达式,那么这篇文章可以让
- 前言我们经常需要根据用户对自己数据的一些操作来做一些事情.比如如果用户删除了自己的账号,我们就给他发短信骂他,去发短信求他回来.类似于这种功
- 接收邮件import poplib,pdb,email,re,timefrom email import headerPOP_ADDR =
- 一、TensorFlow介绍1、简介 TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,