Id    科目   成绩
1    语文    60
2    数学    85
3    语文    85
4    英语    96
5    化学    77
6    英语    50
7    物理    90
8    英语    85
列出最大前3不同分数的3条记录。比如96,90,85,但是有两条85的话要显示两条。显示的条数就是4条

解决方案 »

  1.   

    select * from table1 where 成绩 in(select top 3 成绩 from table1 order by 成绩 desc) t
      

  2.   

    select * from T
    where 成绩 in (select top 3 成绩 from T group by 成绩 order by 成绩 desc)
      

  3.   

    create table t(id int,科目 nvarchar(20),成绩 int)
    insert into t(id,科目,成绩)
    select 1,'语文',60 union all
    select 2,'数学',85 union all
    select 3,'语文',85 union all
    select 4,'英语',96 union all
    select 5,'化学',77 union all
    select 6,'英语',50 union all
    select 7,'物理',90 union all
    select 8,'英语',85select * from t where 成绩 in(select top 3 成绩 from t group by 成绩 order by 成绩 desc) order by 成绩 descdrop table t
      

  4.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb(Id int,科目 varchar(10),成绩 int)
    insert into tb(Id,科目,成绩) values(1,    '语文',    '60')
    insert into tb(Id,科目,成绩) values(2,    '数学',    '85')
    insert into tb(Id,科目,成绩) values(3,    '语文',    '85')
    insert into tb(Id,科目,成绩) values(4,    '英语',    '96')
    insert into tb(Id,科目,成绩) values(5,    '化学',    '77')
    insert into tb(Id,科目,成绩) values(6,    '英语',    '50')
    insert into tb(Id,科目,成绩) values(7,    '物理',    '90')
    insert into tb(Id,科目,成绩) values(8,    '英语',    '85')
    go
    select * from
    (
      SELECT *,Place=(SELECT COUNT(DISTINCT 成绩) FROM tb WHERE  成绩 >= a.成绩)
      FROM tb a
    ) t
    where place <= 3
    ORDER BY  成绩 descdrop table tb
    /*
    Id          科目         成绩          Place       
    ----------- ---------- ----------- ----------- 
    4           英语         96          1
    7           物理         90          2
    2           数学         85          3
    3           语文         85          3
    8           英语         85          3(所影响的行数为 5 行)
    */
      

  5.   

    playwarcraft(时间就像乳沟,挤挤还是有的)面试的时候我就这么
    写的说是效率太低.说用什么set rowcount来实现.也具体没听清.如果是set rowcount怎么实现呢。
      

  6.   

    set rowcount  ? 不會~~~
      

  7.   

    with test as (
    select t.*, rank() over(order by 成绩 desc) as rank from t )
    select * from test
    where rank <= 3试试这个办法