2019独角兽企业重金招聘Python工程师标准>>>

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

转载于:https://my.oschina.net/u/200350/blog/494622

巧用row_number和partition by分组取top数据相关推荐

  1. MariaDB Window Functions窗口函数分组取TOP N记录

    窗口函数在MariaDB10.2版本里实现,其简化了复杂SQL的撰写,提高了可读性. 在某些方面,窗口函数类似于聚集函数, 但它不像聚集函数那样每组只返回一个值,窗口函数可以为每组返回多个值. 作为一 ...

  2. oracle分组_MySQL分组取TOP,实现Oracle的ROW_NUMBER函数的功能

    Excel中分组排序只需要对数据进行升序降序,再利用if函数添加排序序号,即可筛选出分组top数据. Oracle也有row_number()函数对数据进行分组排序,而MySQL并没有此类函数,那么如 ...

  3. hive udf 分组取top1_Hive分组取Top K数据

    1.ROW_NUMBER,RANK(),DENSE_RANK() 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank ...

  4. mysql分组取所有数据_mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql> select accepttime,user,job from tuser_job where user =8 order by acce ...

  5. 联合查询分组取最新数据

    场景: sql分组取最大优化 描述 同事今天遇到一个查询,一次有问题,让我帮忙查看,先上数据,有两张浏览表需要取到用户最新的浏览值数据结构如下 表一 CREATE TABLE `ums_member_ ...

  6. Hive 分组取Top N

    成绩表S,字段sid,cid,score 求每门课程的前2名与后2名sid with a as (select sid,rank() over(distribute by cid sort by sc ...

  7. hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()

    背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科 ...

  8. hive中分组取前N个值的实现

    背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科 ...

  9. SqlServer分组取一瓢和月初月末

    最近发现一个小问题,在以前版本大量迭代中,为了实现各种数据显示,不得不采用分组来显示我们想要的数据,这个数据有什么特点呢?这里大致的分两种,第一种分组取不同数据列满足要求:第二种分组取不同数据且列符合 ...

最新文章

  1. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译
  2. 成功解决Fit Failed Warning: Estimator fit failed. The score on this train-test partition for these param
  3. Linux管道用法示例
  4. org.hibernate.service.ServiceRegistryBuilder被弃用
  5. MVC学习之分页 【转】
  6. 网页“console”输出图文信息
  7. dw网页设计作品_UI设计需要学习哪些软件 如何成为高薪UI设计师
  8. 特征工程框架及技术要点
  9. java 反射 获取Class对象的三种方式
  10. 基于热传导方程的高温作业专用服装设计(一)
  11. not found for libcrypto
  12. psvimg格式PSV存档文件解包工具psvimgtools在macOS环境下的使用教程
  13. 集线器、交换机、路由器
  14. 三星手机html默认,三星手机默认播放器使用方法
  15. 面试技巧:HR常问的70个问题回答技巧
  16. 特种浓缩分离:无机陶瓷膜元件及设备
  17. Android必知必会-长按返回健退出
  18. 【场景】JMeter并发线程组 Concurrency Thread Group 阶梯式加压
  19. led灯亮度渐变实现
  20. 2019Android面经 ---已拿网易云音乐内推offer

热门文章

  1. RxSwift UI控件扩展
  2. Swift直接解析YApi接口为模型
  3. 第29月第21天 ios android curl
  4. 二十一. Python基础(21)--Python基础(21)
  5. TouchDesigner 编译FlexChop
  6. 《Linux内核分析》实验一
  7. IOS开发学习笔记(1)
  8. CentOS+Nginx+PHP+Mysql(3)(转)
  9. IE7的web标准之道——7:(修正)float双倍margin bug
  10. variable ‘‘ of type ‘‘ referenced from scope ‘‘, but it is not defined 异常解决方法