COUNTNULL()作为MySQL函数。它会如何运作?

时间:2016-02-08 22:29:49

标签: mysql

我确信它将是一个聚合函数,因为它将计算一组数据。

但是,任何COUNT()函数如何在MySQL中运行以执行其各自的操作?

3 个答案:

答案 0 :(得分:1)

不是100%清除您要查找的内容,但是为了在列中选择空值的计数,我使用以下内容:

SELECT SUM(CASE WHEN columnname IS NULL THEN 1 ELSE 0 END) FROM tablename;

当值为NULL时,将为其分配值1,否则为0,然后对您需要的任何聚合求和。

答案 1 :(得分:1)

COUNT(*)是一个聚合函数。在SELECT列表中,表达式COUNT(*)将返回行数。如果没有GROUP BY子句,则所有行都将折叠为一行,COUNT(*)聚合将包含一个非负整数值,表示已折叠的行数... a&#34 ;计数"行数。

正如您似乎意识到的那样,涉及COUNT()聚合的其他表达式在NULL值方面的运作方式略有不同。

在SELECT列表中,表达式COUNT(expr)的运行方式与COUNT(*) 完全相同,除了,值为expr且评估为NULL的行为计数中包含

这一切都按照规范运作。

就不存在的COUNTNULL()函数而言,它取决于您希望实现的目标。如果要获取表达式具有NULL值的行的计数,则可以执行条件测试,并返回非NULL值,并使用现有的COUNT聚合,例如:

SELECT COUNT(CASE WHEN expr IS NULL THEN 1 ELSE NULL END) AS `COUNTNULL`
  FROM ...

答案 2 :(得分:0)

我不记得我在哪里学习了这种技术,但可以说最优雅 - 或者至少是极简主义 - 颠倒COUNT()逻辑的方法就是这个表达式,这无疑给人的第一印象是黑魔法可能会以某种方式参与......但它完全合法:

COUNT(column1 IS NULL OR NULL)

...这只能正确计算column1为null的行,因为它等同于以下表达式...

COUNT( (column1 IS NULL) OR (NULL) )

这是一个布尔表达式,只能求值为1(“true”,当column1为空,因此计算此行)或NULL(否则,不计算行)。

逻辑上,它相当于@ spencer7593提供的CASE表达式。