代码之家  ›  专栏  ›  技术社区  ›  Will

子查询的group by和group by列上的distinct计数之间的差异

  •  0
  • Will  · 技术社区  · 7 年前

    这两个查询中是否有可能产生不同的结果?有没有更喜欢的?

    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) 将是首选,因为您没有处理子查询。我只是不知道是否有什么陷阱。可能与空值有关?

    我不确定这是否会有所不同,但我想问的是MySQL在我的用例中的具体情况。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    这两个函数返回不同的值(至少当有一列时)。

    count(distinct) 忽略 NULL 价值观所以 count(distinct NULL) 返回 0 1 .

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

    This rextester演示了一列的差异。

    This rextester说明了两列的差异。