簡體   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