Dan*_*Dan 0 mysql group-by count
我正在尝试执行一个查询,该查询通过名为 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
Run Code Online (Sandbox Code Playgroud)
我想要的结果是 type_id 和每种类型剩余的未售出产品数量。如果至少还剩下一个,则此操作可以正常工作,但是如果存在零计数行,则不会在结果集中返回该行。
如何为那些没有任何相应行进行计数的类型设置虚拟行?
任何建议将不胜感激。
谢谢
您必须使用 aLEFT JOIN而不是INNER JOIN。首先选择所有凭证类型,然后左连接以查找计数。
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
Run Code Online (Sandbox Code Playgroud)