【问题标题】:MySQL include count does not return rows with count zeroMySQL包含计数不返回计数为零的行
【发布时间】:2011-12-06 13:28:08
【问题描述】:

我有以下 MySQL 代码:

SELECT COUNT(e.eid) AS cnt, e.c_id, c.cdesc 
FROM e 
JOIN c on c.c_id = e.c_id 
GROUP by c.c_id

不幸的是,count 不考虑 0 的行,因此例如 c_id 可能有 10 行但只显示 9 行(因为 e_id 的计数之一为零)。

我尝试了LEFT JOINRIGHT JOIN 都没有成功。有人有其他建议吗?

【问题讨论】:

  • 你能附上你的c和e数据吗?可能其中一张表没有 10 行
  • 实际上被省略的是 e.eid 的空值,而不是 0。您是否想要计算同一 c_id 同时存在 e 和 c 记录的计数,或者记录是否可能存在于一个表上而另一个表上不存在?
  • @ajreal 别担心,我想我已经解决了!

标签: mysql join count row


【解决方案1】:

我怀疑你需要的是这样的:

SELECT COUNT(*) AS cnt, c.c_id, c.cdesc 
FROM c 
LEFT JOIN e on c.c_id = e.c_id 
GROUP by c.c_id

【讨论】:

    【解决方案2】:
    SELECT COUNT(e.eid) AS cnt, e.c_id, c.cdesc 
    FROM c
    left JOIN e on c.c_id = e.c_id 
    GROUP by c.c_id
    

    【讨论】:

    • 如果 e 记录不存在,e.c_id 将为空(e.eid 也是如此) - 主选择中的 count(*) 和 c.c_id (可能)会更好。
    【解决方案3】:

    用途:

    SELECT COUNT(*) AS cnt, e.c_id, c.cdesc 
    FROM e 
    JOIN c on c.c_id = e.c_id 
    GROUP by c.c_id
    

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2019-02-08
      相关资源
      最近更新 更多