子列组的数量与按列的不同之间的差异

时间:2018-01-26 14:14:35

标签: 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

SELECT COUNT(*) AS `count`
  FROM (SELECT TRUE
          FROM a
          JOIN b ON a.id = b.a_id
         GROUP BY a.id, b.id) g

对我来说,COUNT(DISTINCT)似乎是首选,因为你没有处理子查询。我只是不知道是否有任何陷阱。也许与nulls有关?

我不确定它是否有所作为,但我是专门针对我的用例询问MySQL。

1 个答案:

答案 0 :(得分:1)

两者返回不同的值(至少在有一列时)。

count(distinct)会忽略NULL个值。因此,count(distinct NULL)会返回0而不是1

group by包含NULL个值作为单独的行,因此它们包含在该查询中。

This rextester说明了一列的差异。

This rextester说明了两列的差异。