mysql - 计数时 MySQL 是否正确处理空值(不同的 col1、col2、col3)

标签 mysql count distinct multiple-columns

我在确定一个定义不明确的表中可能的唯一键时遇到了问题。该表有 5000 行。我在我认为可能是唯一键的字段上选择了 distinct。

select count(distinct col1, col2)
from tab1;

结果是 4980 条记录。然后我检查了 20 条记录,发现 col2 的值为空,但添加 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 错误吗?

最佳答案

manual具体说 COUNT(DISTINCT expr [,expr...])

Returns a count of the number of rows with different non-NULL expr values.

这是您看到的行为。

关于mysql - 计数时 MySQL 是否正确处理空值(不同的 col1、col2、col3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49522791/

相关文章:

mysql - 通过获取所有表结果对每行进行分组

cakephp - 在 CakePHP 的查找函数中使用 DISTINCT

mysql - 如何在 MYSQL 中选择具有 MAX(列值)和 PARTITION 的行?

php - while循环不连接字符串

mysql 查询未按预期过滤 AND

php - 按一天中的小时分组,然后计算每组中的#

php - 计算查询中的一行在所有表中出现的次数

mysql - 我可以通过内连接更新表吗?

php - 存储在表中的时间大于现在

sql - 根据其他列计算一列中的不同值