如何在 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 命令?.
一些笔记:
我对此很感兴趣,因为我有一个很长的 运行 后台进程,它会随着时间的推移将 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
s.
我在 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 命令?.
一些笔记:
我对此很感兴趣,因为我有一个很长的 运行 后台进程,它会随着时间的推移将
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
s.