我确信它将是一个聚合函数,因为它将计算一组数据。
但是,任何COUNT()函数如何在MySQL中运行以执行其各自的操作?
答案 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
表达式。