Mysql 子查询的group by和group by列上的distinct计数之间的差异
在这两个查询中是否有可能产生不同的结果?有人更喜欢的吗Mysql 子查询的group by和group by列上的distinct计数之间的差异,mysql,sql,group-by,subquery,distinct,Mysql,Sql,Group By,Subquery,Distinct,在这两个查询中是否有可能产生不同的结果?有人更喜欢的吗 SELECT COUNT(DISTINCT a.id, b.id) AS `count` FROM a JOIN b ON a.id = b.a_id vs 在我看来,COUNT(DISTINCT)似乎是首选,因为您没有处理子查询。我只是不知道有没有陷阱。也许和空值有关 我不确定这是否有区别,但我要针对我的用例特别询问MySQL。这两个函数返回不同的值(至少当有一列时) count(distinct)忽略NULL值。因此,coun
SELECT COUNT(DISTINCT a.id, b.id) AS `count`
FROM a
JOIN b ON a.id = b.a_id
vs
在我看来,COUNT(DISTINCT)
似乎是首选,因为您没有处理子查询。我只是不知道有没有陷阱。也许和空值有关
我不确定这是否有区别,但我要针对我的用例特别询问MySQL。这两个函数返回不同的值(至少当有一列时)
count(distinct)
忽略NULL
值。因此,count(distinct NULL)
返回0
而不是1
groupby
将NULL
值作为一个单独的行包含在内,因此它们被包含在该查询中
rextester说明了一列的差异
rextester说明了两列的差异。因此,如果保证返回的id从不为null,那么它们会是相同的吗?而且
计数(不同)
会更有效吗?@Will。结果应该是一样的。我可以想象字符串排序的某些情况,其中的值可能会进行不同的比较(我并不是说会发生这种情况,只是一种遥远的可能性)。这两个版本的性能应该是可比的,尽管我见过两个版本都更快的情况(在不同的数据库上)。这取决于优化器。
SELECT COUNT(*) AS `count`
FROM (SELECT TRUE
FROM a
JOIN b ON a.id = b.a_id
GROUP BY a.id, b.id) g