思路分析:

先通过group by得到每个分类别的总和,再通过开窗函数计算整体的总和,两者相除就得到占比了。
当over()后不加任何内容时,就是对所有的数据进行汇总。

1.使用over (partition by)得到总计

select sites_id,channel_id,volume,sum(volume) over (PARTITION by sites_id) as volume_sum
from (select sites_id,channel_id,sum(volume) as volumefrom volumegroup by sites_id,channel_id) t1

2.计算占比

select sites_id,channel_id,volume,volume_sum,round(volume/volume_sum,2) as rate
from (select sites_id,channel_id,volume,sum(volume) over (PARTITION by sites_id) as volume_sum from (select sites_id,channel_id,sum(volume) as volumefrom volumegroup by sites_id,channel_id) t1)t2
order by sites_id,volume desc

在oracle中,也可以使用专门的比例函数「ratio_to_report」来直接计算
上述操作可以更改如下:

select sites_id,channel_id,round(ratio_to_report(volume) over (PARTITION by sites_id),2) as rate
from (select sites_id,channel_id,sum(volume) as volumefrom volumegroup by sites_id,channel_id) t1

SQL求总和的百分比相关推荐

  1. sql 累计占比_SQL语句-求总和的百分比

    问题:求特定列中的值占总和的百分比.例如,确定所有DEPTNO 10工资占总工资的百分比(DEPTNO 10的工资在总工资中的百分比数). 解决方案 总的来说,在SQL中计算占总数的百分比跟书面计算一 ...

  2. SQL语句中计算百分比

    SQL语句中计算百分比  A.TOTAL_COUNT TOTALCOUNT,    A..QUES_COUNT  QUESCOUNT,    CASE WHEN TOTAL_COUNT = QUES_ ...

  3. sql求31到第40条数据(id不连续)

    sql求31到第40条数据(id不连续) --利用开窗函数,并将其当作结果集 查询其31到第40条 select* from (select *,ROW_NUMBER() over(order by ...

  4. 如何用sql求平均成绩

    用sql求 平均成绩大于80的学生姓名

  5. sql sum,group by 分组求和后在求总和,with rollup,with cube的区别

    有表数据如下: create table tt(name varchar(10),num decimal(18,2),ph int)insert into tt(name,num,ph) values ...

  6. oracle 把结果加上百分号_用一条sql语句显示数据百分比并加百分号

    求数值所占比重 关键点:(round(t1.cnt/t2.totalCount*100,2))||'%' 例子: 如下表所示,车辆信息注册表carInfo ID CAR_TYPE CAR_ONWER ...

  7. sqlserver加上百分号_用一条sql语句显示数据百分比并加百分号

    求数值所占比重 关键点:(round(t1.cnt/t2.totalCount*100,2))||'%' 例子: 如下表所示,车辆信息注册表carInfo ID CAR_TYPE CAR_ONWER ...

  8. SQL 求 3 列异值的 4 种方法

    点击蓝色"有关SQL"关注我哟 加个"星标",天天与10000人一起快乐成长 前两天在抽一段数据时,碰到一个典型问题,初一想,有很多解法,所以特想做一次归纳. ...

  9. sql求平均日活_日活、周活(周重活)、月活 统计

    效果展示: 以上数据为测试数据 实现思路: 按照查询天数往前推规定天 比如周.月 登录表为按月分表(数据量大约一张表1000W+数据) 关键sql: laravel5.1 框架 日活实现方式一: 不使 ...

最新文章

  1. MATLAB编写ode文件,MATLABODE45问题M文件为br/functiondq 爱问知识人
  2. Java NIO之Selector(选择器)
  3. php公告栏系统,PHP系统公告-发送通知给每个人
  4. 听说现在都考这些React面试题
  5. 10 文件无效_新手必看!10个CAD常见问题解决技巧
  6. UE4 身体部件换装实现
  7. 2018级软件秋季总结
  8. rails 调用php函数_潜藏在PHP安全的边缘——浅谈PHP反序列化漏洞
  9. 不在gopath目录下能使用godoc吗_一文搞懂 Go Modules 前世今生及入门使用
  10. 因为马云,这也许是他们过得最有意思的腊八节
  11. 要人帮忙,电脑怎么不寄过来?
  12. 如何用计算机tan角度换算,tan角度换算(tan值求角度计算器)
  13. Toplitz矩阵 Hankel矩阵 Hilbert矩阵
  14. 5G六大关键技术及未来发展趋势
  15. 基于PowerBuilder的病案统计系统的设计与实现
  16. 飞机大战小游戏 C语言(课设任务)
  17. 七成知识分子走在过劳死边缘
  18. 不跟你谈“五险一金”的老板,都是在耍流氓
  19. 前后端上传到同一个Git仓库
  20. LC117 Populating Next Right Pointers in Each Node II

热门文章

  1. 申请专利费用可以减免吗
  2. 简单java小程序代码_求简单的JAVA小程序的源代码
  3. 在5G智慧园区的“保龄球道”上,目标全垒打的征途
  4. vue-router back 返回时携带参数
  5. nginx $remote_addr 详解
  6. 《童虎学习笔记》5分钟了解Citus核心系统表
  7. Html中圆圈怎么画,css怎么画圆?
  8. java中的example_mybatis中关于example类详解
  9. git中无法拉取remote仓库中的更新(Untracked Files Prevent Merge)
  10. linux闹钟alarm