我正在将SQL * Plus与Oracle 11.2一起使用,并且我知道如何输出符合某些条件的行数,例如:
select count(*) from MY_TABLE where MY_FIELD is not null;
另外,很容易输出MY_TABLE中的所有行:
select count(*) from MY_TABLE;
但是,如何在SQL * Plus中输出两个计数的比率,即如何在SQL * Plus中对SQL命令的输出进行计算?。
一些笔记:
我对此很感兴趣,因为我有一个长期运行的后台进程,该进程会随着时间的推移将MY_FIELD
列中的值从null
更新为文本,因此很高兴能很快在SQL * Plus中看到行的比例已经完成。
我尝试过
(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
一次-您没有提到-在完成之前您将看不到任何更改,并且最后COMMIT
秒。