Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
COUNTNULL()作为MySQL函数。它将如何运作?_Mysql - Fatal编程技术网

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

COUNTNULL()作为MySQL函数。它将如何运作?,mysql,Mysql,我确信这将是一个聚合函数,因为它将计算一组数据 但是,在MySQL中,COUNT()函数是如何运行的,以执行其各自的操作的?不是100%清楚您在寻找什么,而是为了在列中选择空值计数,我使用如下方法: SELECT SUM(CASE WHEN columnname IS NULL THEN 1 ELSE 0 END) FROM tablename; 当该值为NULL时,将为其赋值1,否则为0,然后在所需的任何聚合上求和。不是100%清楚您要查找的内容,但是为了在列中选择NULL值的计数,我使用如

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


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

不是100%清楚您在寻找什么,而是为了在列中选择空值计数,我使用如下方法:

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

当该值为NULL时,将为其赋值1,否则为0,然后在所需的任何聚合上求和。

不是100%清楚您要查找的内容,但是为了在列中选择NULL值的计数,我使用如下方法:

SELECT SUM(CASE WHEN columnname IS NULL THEN 1 ELSE 0 END) FROM tablename;
当该值为NULL时,将为其赋值1,否则为0,然后在所需的任何聚合上求和。

计数(*)是一个聚合函数。在选择列表中,表达式
COUNT(*)
将返回行数。如果没有
GROUP BY
子句,所有行都将折叠为一行,
COUNT(*)
聚合将包含一个非负整数值,表示折叠的行数。。。行数的“计数”

如您所知,涉及
COUNT()
聚合的其他表达式在
NULL
值方面的操作稍有不同

在选择列表中,表达式
COUNT(expr)
的操作与
COUNT(*)
的操作完全相同,除了值为
expr
且计算结果为
NULL
的行不包括在计数中

这一切都是根据规范操作的

至于不存在的
COUNTNULL()
函数,它取决于您想要实现什么。如果要获取表达式具有空值的行数,可以执行条件测试,并返回非空值,然后使用现有的
count
聚合,例如:

SELECT COUNT(CASE WHEN expr IS NULL THEN 1 ELSE NULL END) AS `COUNTNULL`
  FROM ...
COUNT(*)
是一个聚合函数。在选择列表中,表达式
COUNT(*)
将返回行数。如果没有
GROUP BY
子句,所有行都将折叠为一行,
COUNT(*)
聚合将包含一个非负整数值,表示折叠的行数。。。行数的“计数”

如您所知,涉及
COUNT()
聚合的其他表达式在
NULL
值方面的操作稍有不同

在选择列表中,表达式
COUNT(expr)
的操作与
COUNT(*)
的操作完全相同,除了值为
expr
且计算结果为
NULL
的行不包括在计数中

这一切都是根据规范操作的

至于不存在的
COUNTNULL()
函数,它取决于您想要实现什么。如果要获取表达式具有空值的行数,可以执行条件测试,并返回非空值,然后使用现有的
count
聚合,例如:

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

我不记得我在哪里学过这项技术,但可以说,反转
COUNT()。。。但这是完全合法的:

COUNT(column1 IS NULL OR NULL)
…这仅正确计算column1为null的行,因为它等效于以下表达式

COUNT( (column1 IS NULL) OR (NULL) )
它是一个布尔表达式,只能计算为1(“true”,当column1为null时,此行被计数),或null(否则,此行将不被计数)


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

我不记得在哪里学过这项技术,但可以说,反转
COUNT()逻辑的最优雅的方法,或者至少是最简单的方法是使用这个表达式,不可否认,这给人的第一印象是,黑魔法可能以某种方式参与其中。。。但这是完全合法的:

COUNT(column1 IS NULL OR NULL)
…这仅正确计算column1为null的行,因为它等效于以下表达式

COUNT( (column1 IS NULL) OR (NULL) )
它是一个布尔表达式,只能计算为1(“true”,当column1为null时,此行被计数),或null(否则,此行将不被计数)


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

你的问题不清楚,你想发明这个函数吗?是的。我想发明这个函数。那么,假设我发明了它,它将如何运行呢?它会像COUNT(*)等其他函数一样运行吗?我看不出有什么理由需要这样的函数。如果创建这样一个函数,则使用该函数的任何SQL语句都将无法移植到其他系统。使用已有的函数也可以达到同样的效果。你的问题不清楚,你想发明这个函数吗?是的。我想发明这个函数。那么,假设我发明了它,它将如何运行呢?它会像COUNT(*)等其他函数一样运行吗?我看不出有什么理由需要这样的函数。如果创建这样一个函数,则使用该函数的任何SQL语句都将无法移植到其他系统。使用已经可用的函数可以获得相同的结果。
SUM
COUNT
之间有一个小的区别,即没有行满足谓词的情况。也就是说,对于这个答案中的查询。。。当表
tablename
中没有行时。
SUM()
聚合将返回
NULL
COUNT()
聚合将返回
0
。我想投资一个COUNTNULL()函数,我想它将是一个聚合函数。我的假设正确吗,因为其他也计算数据集合的函数都是聚合函数?@BIG\u MAC\u AND\u FRIES Y