当将 COUNT 与 GROUP BY 一起使用时,MySQL 包含零行

标签 mysql count 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

关于当将 COUNT 与 GROUP BY 一起使用时,MySQL 包含零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855678/

相关文章:

python - 似乎无法让 Python、Peewee、pymysql 和 MySql 数据库正常工作,没有 'returning_clause' 错误

mysql - 如果不为空,则用其他表中的数据更新表?

python - 计算字符串中的字符数,创建一个数据框列?

mysql - 对串联的左连接结果进行排序

php - Mysql性能,一表二

c# - 计算为 BinarySearch 进行的比较次数

c# - 使用 Group By Linq 进行计数

php - Yii:如何使用 CDbCriteria 在 GROUP BY 之前进行 ORDER BY?

python - Pandas 中的Groupby列后缀

mysql - 在mysql中按月和年生成报告