日期:2014-05-16  浏览次数:20786 次

关于效率的sql语句,帮忙看看
select ss.* ,rownum 
from (select 手机号码 ,sum(充值金额) B from 充值记录表 group by 手机号码 order by B DESC) ss
where 手机号码='13313312345'


大家帮忙看一下这个sql语句写得有没有什么问题,除了建立索引还有哪些优化的地方?




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

------解决方案--------------------
既然只查询一个手机的汇总,应该在子查询中就应该将其它的手机号过滤掉。
而且可以省去费时的ORDER BY
参考代码如下:
SQL code

SELECT ss.*, ROWNUM  
FROM 
(SELECT 手机号码, SUM(充值金额) B 
 FROM 充值记录表 
 WHERE 手机号码='133133123445'
 GROUP BY 手机号码   
) ss

------解决方案--------------------
GROUP BY 手机号码 也可以省略,就一个号码,还GROUP BY 什么呢。
SELECT ss.*, ROWNUM
FROM 
(SELECT 手机号码, SUM(充值金额) B 
 FROM 充值记录表 
 WHERE 手机号码='133133123445'
) ss
------解决方案--------------------
因为有聚合函数啊,否则会提示错误。
当然可以通过加上over()来解决。
参考如下:
SQL code

SELECT ss.*, ROWNUM  
FROM 
(SELECT 手机号码, SUM(充值金额) OVER() AS  B 
 FROM 充值记录表 
 WHERE 手机号码='133133123445' 
) ss