当 count(distinct col1, col2, col3) 时,MySQL 是否正确处理空值

吉姆·伯纳姆

我无法在定义不明确的表中确定可能的唯一键。该表有 5000 行。我在我认为可能是唯一键的字段上选择了不同的字段。

select count(distinct col1, col2)
from tab1;

结果是 4980 条记录。然后我检查了 20 条记录,发现 col2 的值为 null,但添加 col3 应该给我唯一性。

select count(distinct col1, col2, col3)
from tab1;

结果还是4980。什么的?所以我把查询改成了这个。

select col1, col2, col3, count(*)
from tab1
group by col1, col2, col3
having count(*) > 1;

有了这个,我得到了零行,所以 col1、col2 和 col3 是唯一的。那么前三列查询有什么问题呢?我试过这个。

select count(distinct col1, coalesce(col2, ''), col3)
from tab1;

这返回了 5000 条记录。

很可能多个字段在引擎中的一个字段中连接在一起,并且连接 col1、NULL、col3 会导致 NULL,这就是它以这种方式运行的原因。但是,结果似乎打破了 MySQL 似乎想要遵循的 NULL 标准。这是一个 MySQL 错误吗?

缺口

手册明确表示,COUNT(DISTINCT expr [,expr...])

返回具有不同非 NULL expr 值的行数。

这是您所看到的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

InnoDB:(PK,col1,col2,col3)形式的覆盖索引是否冗余?

根据其他列的值计算 pandas 中的列(如果 col1<col2 和 col2 > col1,则 col3 = 1)

MySQL的选择其中COL1(INT)的值为2或3,COL2(tinybit)= 0

匹配来自 col2 中 col1 的 ID,如果该行的 col3 值小于在 col1 中匹配的行中的 col3 值,则取该行的值

列出每个 col1 值和多个 col2 值的 col1 和 col2

SQL - 如果 col1 的值期望为 0 并且 col2 的值除了 0 与 col3 的值相同,则值在一行中

如何“插入表1(col1,col2)值,从表2选择col1,从表3选择col2”

在由col1分组时获取col2的第二个最大值

熊猫等效选择计数(distcolt col1,col2)按col3分组

从Col1和Col2中的文本在Col3中写入不匹配的数据

PostgreSQL在它们的差异最大时获取Col1,Col2

如何选择行col1和空col2不同的行

在 col2 中有多个值的列 col1 的值

给定匹配col1的值数组,numpy获取col2中的值

PostgreSQL10-是否可以按列表进行分区(col1,col2,..,colN)?

CSV文件按col1分组并显示col2的最大值

我试图将 Col1 作为列表的值返回,IF Col2 = NULL

使用AWK分组| COL1和COL3

你如何在 col3 共享/重叠 col2 的地方返回 col2?

用 NA 替换 COL2 中的行值,其中 R 中的其他 COL3 值为 NA

选择 Col1 "isnull" & Col2 "notnull" 的行

Laravel 查询 where col1 != col2

如何像在SQL中那样在C#中按小时格式(120:15:10)的行对行进行汇总/分组-如SELECT SUM(col1),col 2,col3 GROUP BY col2,col3

SQL Server:查询以获取表 2 的 Col2 中条件的 Table1 的 Col1 中的值的总和

折叠2列数据框,其中col1包含名称,col2包含值

在Col1中查找所有行相同的值,但在Col2中查找不同的值

通过id sql server选择最小值[col1]为最大值[col2]的行

如果它们的值在 col2 但不在 Python Pandas 的列表中,如何从 col1 中选择值?

字符串操作 col_schema="col1 string,col2 int"。我需要检索 => "col1,col2"