Oracle:如何通过查询获取总数的百分比?
发布于 2021-05-10 20:33:32
我有以下查询,其结果对我来说是非常意外的:
select stato, (count(1) *100) / sum(1)
from LOG_BONIFICA
group by stato;
它为所有行返回100。应该不同吗?
关注者
0
被浏览
126
1 个回答
-
count(1)
等于sum(1)
您的情况。尝试这样的事情:
18:39:36 SYSTEM@dwal> ed Wrote file S:\\tools\buffer.sql 1 select owner, 2 count(*) group_cnt, 3 sum(count(*)) over() total_cnt, 4 round(100*(count(*) / sum(count(*)) over ()),2) perc 5 from dba_objects 6 group by owner 7* order by 4 desc 18:39:57 SYSTEM@dwal> / OWNER GROUP_CNT TOTAL_CNT PERC ------------------------------ ---------- ---------- ---------- SYS 31609 59064 53.52 PUBLIC 24144 59064 40.88 XDB 1660 59064 2.81 SYSTEM 597 59064 1.01 WMSYS 332 59064 .56 EXFSYS 312 59064 .53 IRKAZDATA 158 59064 .27 STRMADMIN 92 59064 .16 DBSNMP 55 59064 .09 RI 25 59064 .04 PASS 16 59064 .03 POTS 19 59064 .03 TI 11 59064 .02 STRMODS 11 59064 .02 OUTLN 10 59064 .02 APPQOSSYS 5 59064 .01 ORACLE_OCM 8 59064 .01 17 rows selected. Elapsed: 00:00:00.16
update :甚至用ratio_to_report更简单
18:53:36 SYSTEM@dwal> ed Wrote file S:\\tools\buffer.sql 1 select owner, 2 round(100*ratio_to_report(count(*)) over (), 2) perc 3 from dba_objects 4 group by owner 5* order by 2 desc 18:54:03 SYSTEM@dwal> / OWNER PERC ------------------------------ ---------- SYS 53.52 PUBLIC 40.88 XDB 2.81 SYSTEM 1.01 WMSYS .56 EXFSYS .53 IRKAZDATA .27 STRMADMIN .16 DBSNMP .09 RI .04 PASS .03 POTS .03 TI .02 STRMODS .02 OUTLN .02 APPQOSSYS .01 ORACLE_OCM .01 17 rows selected. Elapsed: 00:00:00.20
推荐阅读
-
SQL查询以选择占总数的百分比
2021-03-12 关注 0 浏览116 1答案
-
如何在Oracle SQL查询中处理/使用特殊字符(例如百分比(%)和与号(&))
2021-05-10 关注 0 浏览89 1答案
-
如何使用python获取电池百分比?[重复]
2021-01-29 关注 0 浏览118 1答案
-
在单个查询中获取记录的计数百分比
2021-04-20 关注 0 浏览87 1答案
-
使用 groupby 的 Pandas 占总数的百分比
2022-07-28 关注 0 浏览22 1答案
-
如何在JSP中迭代对象以获取百分比?
2021-02-01 关注 0 浏览72 1答案
-
当查询具有GROUP BY时,如何获得总计的百分比?
2021-02-02 关注 0 浏览121 1答案
-
Python-pandas与groupby占总数的百分比
2021-02-02 关注 0 浏览207 1答案
-
如何使用Linux命令获取可用的内存百分比?[关闭]
2021-02-01 关注 0 浏览73 1答案
-
中性粒细胞占血液白细胞总数的百分比
2022-05-15 关注 0 浏览11 1答案