首页 > 解决方案 > 如何在 Oracle 的 SQL*Plus 中输出行计数计算

问题描述

我在 Oracle 11.2 中使用 SQL*Plus,我知道如何输出符合某些条件的行数,例如:

select count(*) from MY_TABLE where MY_FIELD is not null;

输出 MY_TABLE 中的所有行也很容易:

select count(*) from MY_TABLE;

但是,如何在 SQL*Plus 中输出两个计数的比率,即如何在 SQL*Plus 中对 SQL 命令的输出进行计算?.


一些注意事项

  1. 我对此感兴趣,因为我有一个长时间运行的后台进程,它MY_FIELD随着时间的推移将列中的值更新null为文本,因此很高兴在 SQL*Plus 中快速查看已经完成的行数比例。

  2. 我试过了

    (select count(*) from MY_TABLE where MY_FIELD is not null) / (select count(*) from MY_TABLE);
    

    但这显然不起作用,因为它不是正确的 SQL 命令。

标签: sqloracleoracle11gsqlplus

解决方案


count(<expression>)只会计算<expression>不是的行,NULL除非<expression>*- 然后它计算任何行。所以你可以使用:

SELECT count(my_field)
       /
       count(*)
       FROM my_table;

但是,如果填充值的其他进程仅在一个事务中运行并且不是COMMIT每隔一段时间运行一次——你没有提到这一点——那么在它完成之前你不会看到任何变化,最后COMMIT是 s。


推荐阅读