如何在 Oracle 的 SQL*Plus 中输出行数计算

How to output row count calculations in Oracle's 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 命令。

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

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

但是,如果填写值的另一个进程只在一个事务中运行,而不是 COMMIT 每隔一段时间——你没有提到——,你将看不到任何更改直到完成,最后 COMMITs.