SQL

Oracle:如何通过查询获取总数的百分比?

发布于 2021-05-10 20:33:32

我有以下查询,其结果对我来说是非常意外的:

select stato, (count(1) *100) / sum(1)
from LOG_BONIFICA
group by stato;

它为所有行返回100。应该不同吗?

关注者
0
被浏览
126
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看