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>