我有一个成绩表 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请教高手。

解决方案 »

  1.   

    select * from Stu_Score  where Score in (select top 3  Score from (select distinct Score from Stu_Score) b order by Score desc)
      

  2.   

    select * from Stu_Score where Score in(select distinct top 3 Score from Stu_Score order by Score desc)
      

  3.   

    本帖最后由 libin_ftsafe 于 2009-04-08 12:22:23 编辑
      

  4.   

    create table Stu_Score(StuId int,  StuName varchar(10), Score int ) 
    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 行)*/
      

  5.   

    create table stu
    (
      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 行受影响)
      

  6.   


    select * from stu_score 
    where score in(select distinct top 3 Score from stu_score order by score desc)
      

  7.   

    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
    select * from @t where Score in(select distinct top 3 Score from @t order by Score desc)
    2个都一样
      

  8.   

    select * from stu_score 
    where score =(select top 1 score from (select distinct top 3 Score from stu_score order by score desc) a order by score asc)
      

  9.   

    /*
    我有一个成绩表 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
    */
      

  10.   

    select a.*,名次=(select count(*)+1 from score where score>a.score) from score a where 名次<=3
    楼主你的统计不应该叫名次前三的吧,张二张三都应该为第二名,李四王五应该为并列第四,所以我觉得如果要统一名次前三的应该用我的这个SQL
      

  11.   

    如果是查询上表,上面的大虾已给出了方案:select * from Stu_Score
    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
      

  12.   

    code=SQL]Rank() over(order by Score desc) as Place ?[[/code]
    学习了。
      

  13.   

    修改下select a.* from score a where (select count(*)+1 from score where score>a.score)<=3