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)
sql server 分組,取每組的前幾行資料
sql中group by後,獲取每組中的前n行資料,目前我知道的有2種方法 比如有個成績表 裡面有欄位學生id,科目,成績。我現在想取每個科目的頭三名。1.子查詢 select from score s where studentname in select top 3 studentname fr...
sql server 分組,取每組的前幾行資料
sql中group by後,獲取每組中的前n行資料,目前我知道的有2種方法 比如有個成績表 裡面有欄位學生id,科目,成績。我現在想取每個科目的頭三名。1.子查詢 select from score s where studentname in select top 3 studentname fr...
sql server 分組後,取每組前1條資料
sql 排名開窗函式 row number dense rank rank ntile屬於排名函式。排名開窗函式可以單獨使用order by 語句,也可以和partition by同時使用。partition by用於將結果集進行分組,開窗函式應用於每一組。oder by 指定排名開窗函式的順序。在...