现有数据如下:
name type num
铁路局 E 900
铁路局 C 700
铁路局 F 500
铁路局 D 100
电信局 E 2000
电信局 T 600
电信局 H 400
房管局 F 1300
房管局 D 1100
房管局 G 600如何才能 让数据变成
电信局 E 2000
电信局 T 600
电信局 H 400
房管局 F 1300
房管局 D 1100
房管局 G 600
铁路局 E 900
铁路局 C 700
铁路局 F 500
铁路局 D 100也就是所有单位最大的数量排序》》

解决方案 »

  1.   

    select *
    from tb
    order by sum(num) over (partition by name) desc, num desc;
      

  2.   

    select a.name,a,type,a.num from table a,
    (select max(num) num,name from table group by name) b
    where a.name = b.name
    order by b.num,a.name,a.num
    大概思想就是,先查出按name分组的最大num值,然后关联原表排序即可。
      

  3.   


    select name,type,num from 
    (select name,type, num, rownum()over(partition by name order by num desc) from table1) a left join
    (select name,max(num) max_num from table1 group by name) b
    on a.name = b.name
    order by b.max_num desc,num desc
      

  4.   

    4 楼正解,真是佩服,SQL的学问真不浅。呵呵
    也感谢其他楼层的关注
      

  5.   

    with table1 as(
     select '铁路局' name , 900 num from dual union all
     select '铁路局' name , 500 num from dual union all
     select '铁路局' name , 100 num from dual union all
     select '电信局' name , 2000 num from dual union all
     select '电信局' name , 600 num from dual union all
     select '电信局' name , 400 num from dual union all
     select '房管局' name , 1300 num from dual union all
     select '房管局' name , 1100 num from dual union all
     select '房管局' name , 600 num from dual
    )
    select name,num,max(num) over(partition by name order by name,num desc)
      from table1