oracle 查询

qq_35511531 2017-08-04 08:23:24
表结构 table
id name type value year
1 test 电 120 2017
2 test 水 100 2017
3 test 电 80 2017
4 test 水 1 2016

1.查询当年度总能耗
select sum(value) vv from table where year='2017'

2.查询当年度各分类总能耗
select type,sum(value) aa from table
where year='2017'
group by type

3.查询当年度各分类能耗占比,计算方法:round((aa/vv)*100,2)
请问大神sql怎么写???
...全文
247 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35511531 2017-08-07
  • 打赏
  • 举报
回复
引用 2 楼 NextAction的回复:
试试这个
SELECT type,year,占比 FROM (
SELECT type,year,SUM(value) OVER (PARTITION BY type,year)/SUM(value) OVER () AS 占比 ,row_number() OVER (PARTITION BY type,year ORDER BY id) rn
FROM TABLE
GROUP BY type,value,id,year)a
WHERE a.rn=1;
谢谢,问题已解决
mayanzs 2017-08-07
  • 打赏
  • 举报
回复
有个专门的占比函数: select type,round(ratio_to_report(s1)*100,2) over() zb from (select type,sum(value) s1 from table where year='2017' group by type) group by type;
卜塔 2017-08-04
  • 打赏
  • 举报
回复
试试这个
SELECT type,year,占比 FROM (
SELECT type,year,SUM(value) OVER (PARTITION BY type,year)/SUM(value) OVER () AS 占比 ,row_number() OVER (PARTITION BY type,year ORDER BY id) rn
FROM TABLE
GROUP BY type,value,id,year)a
WHERE a.rn=1;
花开了叫我 2017-08-04
  • 打赏
  • 举报
回复
sum()over(partition by )/sum()over() 这个语法手机懒得打字了

17,082

社区成员

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

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