RT,如果按照百分比排序,例如字段如下
Online_user  all_user   
 100          200          
 111          333           
 222          555
 4             50
我们可以得到 online_user   all_user  online_user/all_user 三个字段,我现在想让online_user/all_user字段显示
50.0%
33.3%
40.0%
8%
我如何能让表格按照 online_user/all_user 字段降序排序,即得到
100    200   50%
222    555   40%
111    333   33%
4       50   8%我现在知道如果不对第三个字段进行百分比处理是能得到这个顺序的,但是进行%处理之后就得到了8%排第一位了

解决方案 »

  1.   

    order by Online_user/all_user desc
      

  2.   

    --试试,没测试
    select Online_user, all_user,round(Online_user/all_user*100)||'%' from 表 order by Online_user/all_user desc
      

  3.   

    这样做出来的排序时对的,但是第三个字段显示的是小数啊,我想让他显示X%的形式
    但是如果我处理成X%形式,他排序把X%当做字符串,按照X第一位排序,本例子就是8%排第一
      

  4.   

    这个肯定是8%排第一位,我今天就是这么写的,排序按照字符串X%中X的第一位排序。也就是他将X%看成是字符串,而不是数字了
      

  5.   

    试试:
    select Online_user, all_user,百分比 from(
         select Online_user, all_user,round(Online_user/all_user*100)||'%' 百分比,Online_user/all_user  rn from 表 )
    order by rn desc
      

  6.   

    我想法是这样,不知道可行不可行,就是先select online_user,all_user,Online_user/all_user
    order by Online_user/all_user desc,然后再外层
    select online_user,
           all_user,
           round(Online_user/all_user*100,2)||'%'  
    from (select online_user,
                 all_user,
                 Online_user/all_user
           from tab 
           order by Online_user/all_user desc)
      

  7.   

    恩,确实,这个方法比较好,弄成两个字段,按照没做处理的字段排序,最后select处理之后的字段。外层的select在选择过程中不会把内层order by之后的表格顺序打乱吧?
      

  8.   

    外层的select在选择过程中不会把内层order by之后的表格顺序打乱吧?
    是先select再order
      

  9.   

    everything you must try first,then you can get it!
      

  10.   

    再说对一个已经排序的表
    select出来本省就排序好的
      

  11.   

    order by 永远是select语句最好做的动作!
      

  12.   

    补充
    当select distinct
    order by 必须包含于select 
      

  13.   


    --昨晚没环境测试,我就说啊
    --楼主还是在测试后说不可以吧。with tab as(
    select 100 Online_user,200 all_user from dual
    union all     
    select 111, 333 from dual
    union all   
    select 222, 555 from dual
    union all
    select 4, 50 from dual
    )
    select Online_user, all_user,round(Online_user/all_user*100)||'%'  percent
    from tab order by Online_user/all_user descONLINE_USER  ALL_USER  PERCENT
    100          200       50%
    222          555       40%
    111          333       33%
      4          50        8%