sql server 分组,取每组的前几行数据
sql中group by后,获取每组中的前N行数据,目前我知道的有2种方法
比如有个成绩表: 里面有字段学生ID,科目,成绩。我现在想取每个科目的头三名。
1. 子查询
select * from score s where StudentName in (
select top 3 StudentName from score where s.Subjects = Subjects
group by Subjects,StudentName,Score order by Score desc)
group by Subjects,StudentName,Score order by Subjects,Score desc
2. 用rowNumber函数
select Subjects,StudentName,Score from
(select *,
ROW_NUMBER() over(partition by subjects order by score desc) rowNum
from Score) as s where s.rowNum <= 3
group by Subjects,StudentName,Score order by Subjects,Score desc
以上的2种结果都是一样的。如果还有其他的方法,以后补充
表和表的数据
Create table Score(StudentName char(10),Subjects char(20), Score float)
insert into Score values('小明','语文',90),
('小明','数学',80),
('小明','英语',60),
('小红','语文',93),
('小红','数学',92),
('小红','英语',91),
('小花','语文',50),
('小花','数学',30),
('小花','英语',70),
('小草','语文',95),
('小草','数学',86),
('小草','英语',62),
('小刚','语文',78),
('小刚','数学',68),
('小刚','英语',76),
('小柔','语文',56),
('小柔','数学',86),
('小柔','英语',88),
('小陈','语文',77),
('小陈','数学',88),
('小陈','英语',99)
转载来源:https://blog.csdn.net/u010032648/article/details/51464648
sql server 分组,取每组的前几行数据的更多相关文章
- sql 分组取每组的前n条或每组的n%(百分之n)的数据
sql 分组取每组的前n条或每组的n%(百分之n)的数据 sql keyword: SELECT * ,ROW_NUMBER() OVER(partition by b.UserID order by ...
- SQL Server 分组取 Top 笔记(row_number + over 实现)
先看SQL语句(注意:这是在SQL Server 2005+ [包括2005] 的版本才支持的哦,o(∩_∩)o 哈哈~) SELECT col1,col2,col3 FROM table1 AS a ...
- sql server之ROW_NUMBER() OVER()取每组的第N行数据
先看个例子: document_id card_holder_id created_date document_type_id 1 1 2015-7-1 1 2 4 2015-7-2 1 3 4 20 ...
- SQL Server 2008 R2中,“选择前1000行”为“选择所有行”
从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有"显示所有行",而以"选择前1000行"替代. 点击[工具]-& ...
- mysql 分组取每个组的前几名的问题
select *from hotel_addition_orders awhere (select count(*) from hotel_addition_orders where hotel_or ...
- sqlServer 取每组的前几条数据
首先的建表语句: ) DROP TABLE [test] CREATE TABLE [test] ( [id] [, ) NOT NULL , [name] [nvarchar] () NULL , ...
- SQL分组取每组前一(或几)条记录(排名)
mysql分组取每组前几条记录(排名) 附group by与order by的研究 http://www.jb51.net/article/31590.htm --按某一字段分组取最大(小)值所在行的 ...
- SQL Server 分组后取Top N
SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name ...
随机推荐
- Python中的for...else...搭配
在其他一些语言中,else一般都是和if做搭配使用的,表示为‘如果...否则...‘.而在python中else不仅可以与if搭配,还能与for进行搭配,表示'直到...才...'.如下面这个判断输入 ...
- [转]Node.js框架对比:Express/Koa/Hapi
本文转自:https://www.cnblogs.com/souvenir/p/6039990.html 本文翻译自: https://www.airpair.com/node.js/posts/no ...
- [转]web串口调试助手,浏览器控制串口设备
本文转自:https://blog.csdn.net/ldevs/article/details/39664697 打开串口时查找可用串口供选择 通过javascript调用activex控制串口收发 ...
- c# 调用微吼直播API
/// <summary> /// 调用微吼直播API /// </summary> /// <param name="appKey">< ...
- SVN、CVS、VSS区别
废话不多说,撸起袖子敲黑板 !~~ #首先向大家简要描述一下SVN与CVS.VSS的介绍与对比: 介绍: 三种都是版本控制软件, 多数用于源代码管理1.CVS(Concurrent Version S ...
- [android] 服务的生命周期(混合方式)
绑定服务:可以调用服务里面的方法, 如果调用者activity销毁了,服务也会跟着销毁 单独解除绑定的时候,服务也会被销毁 开启服务:不可以调用服务里面的方法 如果调用者activity退出了,服务还 ...
- mybatis_14二级缓存
原理: 同一级缓存原理相似,在sqlsession3不执行增删改的情况下,sqlsession2的查询结果会直接调用sqlsession1的查询结果,具体细节如下: 使用: 开启二级缓存总开关 U ...
- Java_Queue接口
Queue接口 1.英文 a) Queue 队列 b) Deque ,Double ender queue缩写,双向队列 2.Queue接口 除了基本的 Collect ...
- js实现ctrl+v上传图片
描述:实现类似QQ截图删上传图片的功能 a.需要的js插件 paste.image.js 地址:https://github.com/iyangyuan/pasteimg b.paste.image. ...
- 【Java每日一题】20170117
20170116问题解析请点击今日问题下方的“[Java每日一题]20170117”查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; import jav ...