select * from tab_1 where rownum <= 20 order by 销售额 DESC;

解决方案 »

  1.   

    select * from (select 组编码,sum(销售额) 销售额 from tab_1 group by 组编码) where rownum <= 20 order by 销售额 DESC;
      

  2.   

    是啊,是进销存系统。的
    谢谢qiuyang啊,对了我怎么给你分啊
    我还想问你,你有没有关于ora学习的建议啊告诉我啊 !
      

  3.   

    不对,你可能用数据测试
    用order 和 rownum 根本就实现不了排名
      

  4.   

    一个简单的数据:
    create table t(bm varchar2(2),xl number(5,2));
    insert into t values(10,5)
    insert into t values(11,4)
    insert into t values(12,8)
    insert into t values(10,7)
    insert into t values(13,10.2)
    insert into t values(12,20)
    insert into t values(14,88)
    insert into t values(13,10)正确的排名次序(所有)
    select bm,sum(xl)xl from t group by bm order by xl desc
    BM              XL
    -------- ---------
    14              88
    12              28
    13            20.2
    10              12
    11               4如果按这种方式指定排名次序前三名倒排:
    select * from(select bm,sum(xl)xl from t group by bm)
    where rownum<4 order by xl desc;BM              XL
    -------- ---------
    12              28
    10              12
    11               4结果肯定不对。
    如果rownum 小如总记录数,SQL语名不能查询所有记录。
      

  5.   

    zhbalan() 说的不错啊,我试了一下,得不到我需要的结果。我需要的,是若干大组中每个组所有商品销售的前20名。比如我们把上边BM 中12 设为大组号,那么所的的正确结果应该是有20个12大组所属商品及销售金额出现所选列中{当然如果存在20个以上商品)
    感谢大家的参与,每个参与者都给分啊!
      

  6.   

    那就再加一层吗:
    select * from (
      select * from (select 组编码,sum(销售额) 销售额 from tab_1 group by 组编码) order by 销售额 DESC
       )
      where rownum <= 20 ;
    这样行了吧。
      

  7.   

    select 组编码,销售额
    from
    (select 组编码,销售额,rank() over (partition by 组编码 order by 销售额) ranknum from 销售记录表
    (
    where ranknum<=20;
      

  8.   

    我是ORA7版本
    回-》小数点
    在家一层也不可以的。我在WHERE 语句中加大组号的,选择的结果是不对的。
      

  9.   

    回——》小数点
    你给的语句我执行了,但报错。ORDER BY 语句丢失右括号。
    且在最后的WHERE 语句中不可以加 组号 IN (51,52,53)
      

  10.   

    在<oracle8高级编程指南>一书中提到过分析函数,我理解不太深,不敢随便说,但上面的例子很适合你,好像改改就可以用