繁体   English   中英

当使用COUNT和GROUP BY时,MySQL包含零行

[英]MySQL include zero rows when using COUNT with GROUP BY

我正在尝试执行一个查询,该查询通过名为type_id的属性对一组数据进行分组。

SELECT
vt.id AS voucher_type,
COALESCE(COUNT(v.id), 0) AS vouchers_remaining
FROM
vouchers v
INNER JOIN voucher_types vt
ON vt.id = v.type_id
WHERE
v.sold = 0
GROUP BY vt.id

我想要的结果是type_id和每种类型剩余的未售出产品数量。 如果至少还剩一个,则此方法正常,但是,如果存在零计数行,则不会在结果集中返回该行。

我该如何为没有相应行要计数的那些类型设置一个虚拟行?

任何建议将不胜感激。

谢谢

您必须使用LEFT JOIN而不是INNER JOIN 首先选择所有voucher_types ,然后进行左连接以查找计数。

SELECT
  voucher_types.id AS voucher_type,
  IFNULL(vouchers_count.vouchers_remaining, 0) AS vouchers_remaining
FROM
  voucher_types
LEFT JOIN
  (
    SELECT
    v.type_id AS voucher_type,
    COUNT(v.id) AS vouchers_remaining
    FROM
    vouchers v
    WHERE
    v.sold = 0
    GROUP BY v.type_id
  ) AS vouchers_count
  ON vouchers_count.voucher_type = voucher_types.id

您想要一个外部联接(或左联接,相同的区别)而不是一个内部联接。 那应该已经成功了。

因为您正在执行INNER JOIN,所以您会自动排除没有相应凭证的类型。 您需要一个正确的外部联接。

而且,据我所记得,COUNT总是会给您一个整数,因此不需要COALESCE。

祝你好运,阿琳

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM