我有一个成绩表 Stu_Score
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97
1006 赵六 95
1007 小华 80
我现在要查询出位于前三名的学生成绩
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97请教高手。
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97
1006 赵六 95
1007 小华 80
我现在要查询出位于前三名的学生成绩
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97请教高手。
goinsert Stu_Score select 1001 , '张一' , 100
insert Stu_Score select 1002 , '张二' , 98
insert Stu_Score select 1003, '张三' , 98
insert Stu_Score select 1004 , '李四' , 97
insert Stu_Score select 1005 , '王五' , 97
insert Stu_Score select 1006, '赵六' , 95
insert Stu_Score select 1007 , '小华' , 80 go
select * from Stu_Score a where Score in (select top 3 Score from (select distinct Score from Stu_Score) b order by b.Score desc) order by a.score desc
go
/*
StuId StuName Score
----------- ---------- -----------
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97(所影响的行数为 5 行)*/
(
StuId int identity(1001,1) primary key,
StuName varchar(20),
Score int
)
insert into stu select '张一',100
union all select '张二',98
union all select '张三',98
union all select '李四',97
union all select '王五',97
union all select '赵六',95
union all select '小华',80select * from stu where Score in(select distinct top 3 Score from stu order by Score desc)StuId StuName Score
----------- -------------------- -----------
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97(5 行受影响)
select * from stu_score
where score in(select distinct top 3 Score from stu_score order by score desc)
select * from @t where Score in(select distinct top 3 Score from @t order by Score desc)
2个都一样
where score =(select top 1 score from (select distinct top 3 Score from stu_score order by score desc) a order by score asc)
我有一个成绩表 Stu_Score
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97
1006 赵六 95
1007 小华 80
我现在要查询出位于前三名的学生成绩
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97请教高手。
*/
create table Stu_Score (StuId int, StuName varchar(20) ,Score int)
insert into Stu_Score
select 1001,'张一',100 union
select 1002,'张二',98 union
select 1003,'张三',98 union
select 1004,'李四',97 union
select 1005,'王五',97 union
select 1006,'赵六',95 union
select 1007,'小华',80select *
from Stu_Score
where Score in (
select top 3 Score
from Stu_Score group by Score order by 1 desc)
/*
StuId StuName Score
1001 张一 100
1002 张二 98
1003 张三 98
1004 李四 97
1005 王五 97
*/
楼主你的统计不应该叫名次前三的吧,张二张三都应该为第二名,李四王五应该为并列第四,所以我觉得如果要统一名次前三的应该用我的这个SQL
where Score in(select top 15 Score from Stu_Score Group by Score) order by Score desc
如果还要排出名次,如下语句可实现:select *,Rank() over(order by Score desc) as Place from Stu_Score
where Score in(select top 15 Score from Stu_Score Group by Score) order by Score desc
学习了。