当前位置: 首页 > 面试题库 >

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

金宣
2023-03-14
问题内容

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

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

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


问题答案:

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


 类似资料:
  • 问题内容: 从PDO手册中: PDOStatement :: rowCount()返回 受相应PDOStatement对象执行的最后一个 DELETE,INSERT或UPDATE* 语句影响 的行数 。 * 如果关联的PDOStatement执行的最后一条SQL语句是 SELECT 语句,则 某些数据库可能返回该 语句 返回的行数 。但是, 并非对于所有数据库 都可以 保证 此行为 , 并且便携式

  • 问题内容: 假设我有一个非标准化的表格,其中包含电影演员姓名和他们所去过的电影。 我要做的是找出演员去过多少部电影。但是我也想找出演员去过多少部电影。 我想我可以这样做: 但这似乎… idk …令人讨厌。 有任何想法吗? 问题答案: 对于大型集合,JOIN的性能可能优于子查询。 对于大型集合,当返回很大比例的行时,JOIN操作通常可以胜过子查询。在您的情况下,它不是相关子查询,因此MySQL不必多

  • 问题内容: 是否有可能以某种方式获取MySQL数据库的结构,或者只是一些具有简单查询的表? 还是有另一种方法,我该怎么办? 问题答案: 我认为你所追求的是 您也可以使用 获取数据库中表的列表。

  • python 如何分批查询Oracle 就是比如数据库有几万数据第一次查询前100以此类推一直到查询到所有数据

  • 问题内容: 我有一个MSSQL表存储,该存储在表中具有以下列: 有人可以帮我进行SQL查询,以产生占雇员总数(NumEmployees)30%的顶级商店(storeID)吗? 问题答案: WITH cte AS (SELECT storeid, numemployees, ( numemployees * 100 ) / SUM(numemployees) OVER (PARTITION BY 1

  • 问题内容: 参考这个问题: 在一列中获取项目及其值的计数 我如何在单个查询中获得记录计数的百分比,如下所示: 谢谢 问题答案: 给你总数。 编辑 但是实际上,您需要对该列中的值求和。