select ss.* ,rownum 
from (select 手机号码 ,sum(充值金额) B from 充值记录表 group by 手机号码 order by B DESC) ss
where 手机号码='13313312345'
大家帮忙看一下这个sql语句写得有没有什么问题,除了建立索引还有哪些优化的地方?

解决方案 »

  1.   

    select ss.* ,rownum  
    from (select 手机号码 ,sum(充值金额) B from 充值记录表
    where 手机号码='13313312345'
    group by 手机号码 order by B DESC) ss
      

  2.   

    既然只查询一个手机的汇总,应该在子查询中就应该将其它的手机号过滤掉。
    而且可以省去费时的ORDER BY
    参考代码如下:SELECT ss.*, ROWNUM  
    FROM 
    (SELECT 手机号码, SUM(充值金额) B 
     FROM 充值记录表 
     WHERE 手机号码='133133123445'
     GROUP BY 手机号码   
    ) ss
      

  3.   

    GROUP BY 手机号码  也可以省略,就一个号码,还GROUP BY 什么呢。
    SELECT ss.*, ROWNUM  
    FROM 
    (SELECT 手机号码, SUM(充值金额) B 
     FROM 充值记录表 
     WHERE 手机号码='133133123445'
    ) ss
      

  4.   

    因为有聚合函数啊,否则会提示错误。
    当然可以通过加上over()来解决。
    参考如下:SELECT ss.*, ROWNUM  
    FROM 
    (SELECT 手机号码, SUM(充值金额) OVER() AS  B 
     FROM 充值记录表 
     WHERE 手机号码='133133123445' 
    ) ss
      

  5.   


    还是要GROUP BY 的,如果这个号码对对应多条记录,以上后产生重复记录