有一个学生表st:
id  name  score
1   张三1  100
2   张三2  20
3   张三3  60
4   张三4  70
5   张三5  100
6   张三6  60
用一句sql实现:取出表中成绩最大的前四条记录。
多谢啦!

解决方案 »

  1.   

    select top 5 * from st order by score desc
      

  2.   

    嘿嘿 不对呀 刚做了试验 那个top 5 是什么意思?
      

  3.   

    哦,那个改成4,另外这个意思就是选择以scroe倒序的前四个,也就是前四名了
      

  4.   

    http://hi.baidu.com/lifeisgood777/blog/item/c8618af5862eece77709d734.html
      

  5.   

    select * from (select * from student order by score desc) where rownum <5;
      

  6.   


    select * from (select *,rownum rn from student order by score desc)stu where stu.rn<5;
      

  7.   

    select * from (select * from st order by score  desc ) where rownum<=4
      

  8.   

    select * from (select rownum IDX,st.* from st
    order by score desc) where IDX < 5 
      

  9.   

    在oracle 11下的可以运行的select * from 
    (select * from st order by score desc)
    where rownum < 5;你试试看!
      

  10.   

    top 是MSSQL的语法,ORACLE里没有的,这位兄弟看样子是MSSQL用得多
    ORACLE都是用ROWNUM来取前几条的
      

  11.   

    用TOP,还解释一下,有点搞笑哦
    不过最后给出的链接又对了
      

  12.   

    select * 
    from
    (select * from st order by score desc)
    where rownum<=5
      

  13.   

    select * 
    from 
    (select * from st order by score desc) 
    where rownum <=4
      

  14.   

    select id,name,score 
    from 
    (SELECT id,name,score,ROW_NUMBER() OVER (ORDER BY score desc) AS rn  FROM st)
    where rn<=4
    order by rn
      

  15.   

    select * from st group by desc order by rownum<=4;
      

  16.   

    select * from st   where rownum <=4  order by score  desc为什么要搞那复杂呢?
      

  17.   

    select * from ceshi 
    drop table ceshi
    create table ceshi (a number(10),b varchar2(10),c number(5));
    insert into 
    ceshi
    values(1,'张三1',100);
    insert into 
    ceshi 
    values(1,'张三2',20);
    insert into 
    ceshi
    values(1,'张三3',60);
    insert into 
    ceshi
    values(1,'张三4',70);
    insert into 
    ceshi
    values(1,'张三5',100);
    insert into 
    ceshi
    values(1,'张三6',60); 
     select a,b,c,rownum from ceshi 
    where rownum<=4
     order by c desc 
      

  18.   


    SELECT * FROM(
    SELECT t.id,t.name,t.score,
           row_number()over(ORDER BY t.score DESC) rn
    FROM zheng t) a
    WHERE a.rn<=4
      

  19.   

    来晚了,不用那么麻烦,select * from student where rownum<5 order by score desc
      

  20.   

    经过实验,下面的脚本才是正确的。
    select b.*,rownum  from (select t.* from student t  
     order by score desc)b where rownum<5;
      

  21.   

    呵呵 
    你没去试过吧
    这种写法只有在SCORE是主键的情况下才会结果正确,否则的话,会给出错误的答案
      

  22.   

    select * from 
      ( select * from st order by score desc) 
    where rownum < 5
      

  23.   

    应该用rank()函数。order 再大数据量情况下性能极低。
    select * from (select t.*,rank() over(partition   by id order by score desc ) rk from student t) tmp where  rk<6
      

  24.   

    使用rack() over 就是了。上面已经有正确答案。
      

  25.   

    使用rank() over 就是了。上面已经有正确答案。