Oracle SQL Developer - 计数函数
Posted
技术标签:
【中文标题】Oracle SQL Developer - 计数函数【英文标题】:Oracle SQL Developer - Count function 【发布时间】:2014-03-02 14:27:42 【问题描述】:这是从 table1 中选择 * 的输出,我对 count 函数有疑问...我想计算那个 NULL,为了做到这一点,正确的选择是这样做:
select count(*) from table1 where fecha_devolucion is null --> 这给了我正确的答案,但是如果我这样做:
select count(fecha_devolucion)
from table1
where fecha_devolucion is null --> this returns 0, why? Isn't the same syntax?
从表中选择特定字段和 * 有什么区别?
【问题讨论】:
【参考方案1】:来自文档 (http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions032.htm):
如果指定 expr,则 COUNT 返回 expr 所在的行数 不为空。 ...
如果指定星号 (*),则此函数返回所有行...
换句话说,COUNT(fecha_devolucion) 计算该列的非 NULL 值。 COUNT(*) 计算总行数,与值无关。
【讨论】:
【参考方案2】:这是获取计数的另一种方法:
SELECT SUM(NVL(fecha_devolucion,1)) FROM table1 WHERE fecha_devolucion IS NULL;
【讨论】:
【参考方案3】:让我们比较一下这两个查询:
select count(*)
from table1
where fecha_devolucion is null;
select count(fecha_devolucion)
from table1
where fecha_devolucion is null;
我认为你误解了count()
函数。此函数计算其参数列表中非NULL
值的数量。使用常量或*
,它会计算所有行。
所以,第一个计算所有匹配的行。第二个计算fecha_devolucion
的所有非NULL 值。但是由于where
子句,没有这样的值。
顺便说一句,你也可以这样做:
select sum(case fecha_devolucion is null then 1 else 0 end) as Nullfecha_devolucion
from table1;
【讨论】:
以上是关于Oracle SQL Developer - 计数函数的主要内容,如果未能解决你的问题,请参考以下文章
Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,最后一位会被置为0
oracle sql developer工具 如何给用户分配权限
将 SQL Server Express 升级到 Developer 性能计数器注册表一致性错误