![](/img/trans.png)
[英]MySQL include zero rows when using COUNT with LEFT OUTER JOIN and GROUP BY
[英]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.