有表如下: 表名: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> |