select * from 
    (
    select gzzt00,sum(zcje00) zcje00 from tb_ryxfb0
    group by gzzt00
    order by zcje00 desc 
    )
where rownum<=10

解决方案 »

  1.   

    楼上的,你先学学rownum是一个什么样的值再来回答吧,这样不行的。
    我记得有一个ORACLE中有一个函数可以实现,想不起来了
    但还是对你的热情表示感谢,
      

  2.   

    select * from
        (
           select * from 
           (
              select gzzt00,sum(zcje00) zcje00 from tb_ryxfb0
              group by gzzt00
           )
           order by zcje00 desc 
        )
        where rownum<=10
      

  3.   

    foger(风林火山) 的做法是正确的。
    因为他利用的子查询,在子查询里面,假如使用rownum,其实,是利用了oracle的rowid这个伪列。
    但是,对子查询使用rownum,oracle已经不能为你找到这个rownum,这个时候的rownum就是重新分配出来的,和数据库原来的rowid一点关系都没有了。其实,是你自己的理解错误了,你才应该去学习一下。他写错了一个地方,就是order by的那个地方。select * from 
        (
        select gzzt00,sum(zcje00) zcje00 from tb_ryxfb0
        group by gzzt00
        order by sum(zcje00) desc 
        )
    where rownum<=10还有,你这样说别人,很伤别人的心的。别人好心好意帮助你,结果,被你一棍子,虽然你道歉了,要是我打你一顿,然后抱歉,你接受吗?
      

  4.   

    楼上说的这些方法在ORACLE8.1以上版本确实都可以正常运行,但在805下子查询中使用ORDER BY 是编译不过的。
    我找到解决方法了
    select * from 
    (
       SELECT gzzt00, sum(zcje00),
       RANK() OVER (PARTITION BY gzzt00
                    ORDER BY sum(zcje00), DESC) "sn"
       FROM tb_ryxfb0
       group by gzzt00
    )
    order by sn<5
    可以查出各gzzt00 前5名的情况。