Oracle 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如何写?
我知道RATIO_TO_REPORT的方法,这个解答就不必了

oracle中
PHP code:--------------------------------------------------------------------------------
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>

PHP code:--------------------------------------------------------------------------------
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>

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓