sqlserver巧用row_number和partition by分组取top数据

时间:2024-01-28 12:33:39 

分组取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排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

标签:row,number,partition
0
投稿

猜你喜欢

  • python中xlrd模块的使用详解

    2021-02-13 12:05:27
  • python学习笔记:字典的使用示例详解

    2022-06-14 16:31:31
  • Python实现葵花8号卫星数据自动下载实例

    2021-09-26 13:40:25
  • python数据化运营的重要意义

    2021-05-05 21:02:27
  • JavaScript模块化开发流程分步讲解

    2024-06-05 09:11:18
  • 初学JavaScript第二章

    2024-04-17 10:11:30
  • Python统计学一数据的概括性度量详解

    2022-08-16 03:18:20
  • SQL Server 2016里的sys.dm_exec_input_buffer的问题

    2024-01-14 19:06:44
  • 详解ABP框架中的数据过滤器与数据传输对象的使用

    2024-05-02 17:19:47
  • python画一个圣诞树实现示例

    2021-06-12 03:54:53
  • python 的生产者和消费者模式

    2021-09-18 07:19:45
  • Python利用prettytable实现格式化输出内容

    2023-10-17 11:02:32
  • MySQL 中这么多索引该怎么选择

    2024-01-17 12:58:54
  • Python数据分析入门之教你怎么搭建环境

    2023-03-15 12:21:11
  • sqlserver数据库危险扩展删除和恢复代码

    2024-01-27 19:30:46
  • Python 读取图片文件为矩阵和保存矩阵为图片的方法

    2022-07-23 05:21:11
  • Python3如何判断三角形的类型

    2022-01-06 22:12:51
  • MySQL如何统计一个数据库所有表的数据量

    2024-01-23 20:07:14
  • Go语言快速入门图文教程

    2023-07-23 10:30:16
  • MYSQL初学者命令行使用指南

    2024-01-15 08:46:33
  • asp之家 网络编程 m.aspxhome.com