1. 程式人生 > >sql server 分組,取每組的前幾行資料

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)