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