gpt4 book ai didi

mysql - 为什么 count(distinct ..) 在同一张表上返回不同的值?

转载 作者:行者123 更新时间:2023-11-29 07:36:21 25 4
gpt4 key购买 nike

select count(distinct a,b,c,d) from mytable;
select count(distinct concat(a,'-',b),concat(c,'-',d)) from mytable;

因为“-”从未出现在 a、b、c、d 字段中,所以上面的 2 个查询应该返回相同的结果。我对吗 ?

实际上并非如此,差异是 ~60M 中的 4 行,我无法弄清楚这是怎么可能的

任何想法或例子?谢谢

最佳答案

首先,我假设您使用的是 MySQL,因为这是唯一可以接受您的语法的原始标签数据库。

其次,这并没有直接回答你的问题。鉴于您的类型和表达方式,我看不出您如何获得不同的结果。然而,非常相似的结构可能会产生不同的结果。

请务必注意,NULL 不是罪魁祸首。如果 COUNT(DISTINCT)CONCAT() 的任何参数为 NULL,则结果为 NULL - - 和 NULL 不计算在内。

但是,字符串末尾的空格可能是个问题。考虑这个查询的结果:

select count(distinct x, y),
count(distinct concat(x, '-', y)),
count(distinct concat(y, '-', x))
from (select 1 as x, 'a' as y union all
select 1, 'a ' union all
select 1, NULL
) a

我希望第二个和第三个参数返回相同的东西。但是字符串末尾的空格会导致差异。 COUNT(DISTINCT) 忽略它们。但是,CONCAT() 会将它们嵌入到字符串中。因此,上述返回

1     1     2

而且这两个值是不同的。

换句话说,两个值可能不完全相同,但 COUNT(DISTINCT) 可能认为它们相同。空格就是一个例子。排序规则是另一个潜在的罪魁祸首。

关于mysql - 为什么 count(distinct ..) 在同一张表上返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com