我有三个表 CustomerSales 和 Icecream。为了便于理解,每次销售中都有一个冰淇淋。
CustomerSales 表包含(CustomerId、PurchaseId、邮政编码、IcecreamID)
Ice_Cream 包含(Ice_Cream 名称,Ice_Cream Id)
我正在尝试编写一个查询,将巧克力冰淇淋的销售额返回到每个邮政编码(邮政编码),但我还想知道哪些邮政编码的销售额为零。目前它只返回有销售的邮政编码。
SELECT C.postcode, COUNT(*) AS TOTAL SALES
FROM CustomerSales C JOIN IceCream I
ON C.icecreamID = I.id AND
WHERE I.name = "Chocolate" AND C.saleyear = "2019"
GROUP BY C.postcode;
这与我想要的很接近,但只包括实现销售的邮政编码。我还想包括 2019 年巧克力冰淇淋销量为 0 的邮政编码。
我该怎么做?我尝试过汇总,但认为我做错了。
我也在想
SELECT C.postcode, COUNT(*) AS TOTAL SALES
FROM CustomerSales C OUTER LEFT JOIN IceCream I
ON C.icecreamID = I.id AND
WHERE I.name = "Chocolate" AND C.saleyear = "2019"
GROUP BY C.postcode;
我认为问题是,计数返回行的值。
最佳答案
计算 PurchaseId,而不是 *,我认为这应该返回预期的结果:
SELECT C.postcode, COUNT(C.PurchaseId) AS TOTAL SALES
FROM CustomerSales C OUTER LEFT JOIN IceCream I
ON C.icecreamID = I.id AND
WHERE I.name = "Chocolate" AND C.saleyear = "2019"
GROUP BY C.postcode;
关于MySQL:返回带有 NULL 或 0 Vales 的计数 (*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58752431/