group by后的汇总结果,如何去和总和做百分比

有表如下:
表名:table1
字段有两个:name  amount
表的数据如下:
---------------
aa 10
bb 20
aa 10
bb 20
cc 30
---------------
select name, sum(amount)
from table1
group by name;
返回结果:
-------------
aa 20
bb 40
cc 30
------------
当前问题是,返回结果不仅要有有2列,还要求在加一列,这一列显示出name这个字段对应的总的汇总数量,占总数量的百分比。
如上边返回结果表明,表里的总数量是: 20+40+30=90
那么现在要求返回如下结果:
-------------
aa 20 23% (既20/90的结果)
bb 40 44% (既40/90的结果)
cc 30 33% (既30/90的结果)
------------

怎样写这个sql呢? 

================================

oracle中

SQL> select * from th_01;

NA         JE
-- ----------
aa         10
bb         20
aa         10
bb         20
cc         30

SQL> select name, (round(max(xj) / max(zj), 2)) * 100 || '%'
  2    from (select name,
  3                 je,
  4                 sum(je) over(partition by name order by name) xj,
  5                 sum(je) over() zj
  6            from th_01)
  7   group by name;

NA (ROUND(MAX(XJ)/MAX(ZJ),2))*100||'%'
-- -----------------------------------------
aa 22%
bb 44%
cc 33%

==================================

SQL> with tt as (
  2  select 'aa' na, 10 am from dual union all
  3  select 'bb', 20 from dual union all
  4  select 'aa', 10 from dual union all
  5  select 'bb', 20 from dual union all
  6  select 'cc', 30 from dual
  7  )
  8  select a.*, RATIO_TO_REPORT(su) over()
  9    from (select na, sum(am) su from tt group by na) a
10  ;

NA         SU RATIO_TO_REPORT(SU)OVER()
-- ---------- -------------------------
aa         20         0.222222222222222
bb         40         0.444444444444444
cc         30         0.333333333333333

SQL> 

===========================

提问的智慧Oracle版
0。尝试在google,论坛,metalink,online document里搜索。
1。写清楚你的执行log,报错信息,写清楚DB version , OS 
2。Instance 方面的问题,请贴出alertlog
3。network的问题,贴出server的listener.ora , sqlnet.ora 并运行lsnrctl service, 贴出client的tnsnames.ora , sqlnet.ora ,并运行tnsping 
4。DB总体性能问题,请上传peak time的AWR report和ASSH report。同时附上CPU/MEM配置,以及CPU IDLE/free menory的情况
5。SQL性能问题,列出当前SQL,以及PLAN。同时应提供表结构,index情况,Table的record数。CBO/RBO,table是否analyze等信息。
6。确保你的问题是Oracle相关。

SQL> with tt as (
  2    select 'aa' na, 10 am from dual union All
  3    select 'bb', 20 from dual union All
  4    select 'aa', 10 from dual union All
  5    select 'bb', 20 from dual union All
  6    select 'cc', 30 from dual
  7    )
  8  Select a.na,a.s,a.s/b.t From
  9  (Select na,Sum(am) s From tt Group By na) a,(Select Sum(am) t From tt) b
10  /

NA          S    A.S/B.T
-- ---------- ----------
aa         20 0.22222222
bb         40 0.44444444
cc         30 0.33333333

SQL>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值