sql - 如何在 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 命令的输出进行计算?.
一些注意事项:
我对此感兴趣,因为我有一个长时间运行的后台进程,它
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。
推荐阅读
- python - Enable and Disable constraints on database using aws glue
- java - Adding mouselistener to item in list to update panels
- javascript - 在闪亮的应用程序中的传单地图中的弹出窗口中添加自定义操作按钮
- c# - T-SQL 有一个`time` 数据类型——C# 是否只有`time`,而不是`datetime` 数据类型?
- kubernetes - Kubernetes:节点找不到要绑定的可用持久卷
- jquery - 如何显示来自 ajax 响应的原始 XML?
- c# - 如何使用 fluent-nhibernate 正确映射和更新自引用实体
- maven - 启动弹簧启动时出错“尝试调用不存在的方法”
- labview - 如何使用 LabVIEW 将打包的 BCD 数字写入旧仪器(Varian FR41 Gaussmeter)?
- bash - 逐行读取和打印文件以及bash中每行的行号和总行数