日期:2014-05-17  浏览次数:20818 次

请教这样怎么排序
高手帮忙看段SQL,取前20名问题


这个报表是“损失率较小的前20名”,另外,所取的表的数据量现在大概有10W行

报表的结构是这样的
id 本月供电量 本月售电量 上月供电量 上月售电量

表结构是这样的
  id
  gdl 供电量
  sdl 售电量
  rq 日期(格式为200808)

我写到如下就不知道该怎么往下写了,假设统计的日期为200808
select 
id,
sum(decode(rq,200808,gdl,0)) 本月供,
sum(decode(rq,200808,sdl,0)) 本月售,
sum(decode(rq,200807,gdl,0)) 上月供, --这里图简单直接写出了200807,实际是用了add_months
sum(decode(rq,200807,sdl,0)) 上月售
from table
group by id
下面不知道怎么排序了,损失率=(供-售)/供, 按本月的排序。取前20名

------解决方案--------------------

select *
SQL code
from(
select 
id, 
sum(decode(rq,200808,gdl,0)) 本月供, 
sum(decode(rq,200808,sdl,0)) 本月售, 
sum(decode(rq,200807,gdl,0)) 上月供,    
sum(decode(rq,200807,sdl,0)) 上月售,

round((sum(decode(rq,200808,gdl,0)) -sum(decode(rq,200808,sdl,0)) )/sum(decode(rq,200808,gdl,0)),4) loss_rate 
from table 
group by id 
order by 6 desc
)
where rownum<=20