请教这样怎么排序

thriller818 2008-09-22 03:58:10
高手帮忙看段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名
...全文
45 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
范佩西_11 2008-09-22
  • 打赏
  • 举报
回复
select id,
a.gdl 本月供电量,
a.sdl 本月售电量,
b.gdl 上月供电量,
b.sdl 上月售电量
from (select id, rq, gdl, sdl from tablename) a,
(select id, rq, gdl, sdl from tablename) b
where a.id = b.id
and add_months(to_date(b.rq, 'yyyymm'), 1) = to_date(a.rq, 'yyyymm');
thriller818 2008-09-22
  • 打赏
  • 举报
回复
这么快就有回复了,我试过了,谢谢啊。
hebo2005 2008-09-22
  • 打赏
  • 举报
回复

select *
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

17,141

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧