我目前正在研究具有 2 个数据表的 PostgreSQL:项目和订单。
我想显示一段时间内每个项目的订单数,但如果名称为 0,我想保持显示名称。
我实际上在做:
SELECT Item.name, count(Order.id) from Item
INNER JOIN Order ON Item.id = Order.it_id
WHERE Order.date > '01/08/2021'
问题是我的结果是:
Chocolate | 1
Cake | 2
Muffin | 3
我想要:
Chocolate | 1
Cake | 2
Muffin | 3
Pancake | 0
Donut | 0
我使用了一个 RIGHT JOIN,它在没有我的 WHERE 条件的情况下工作,但我需要用我的结果值的日期进行过滤。
也许我不是在做这件事的好方法。我不知道这是否可能,或者是否有其他方法可以做到。
先感谢您。
首先,您的查询应该返回一个错误,因为它没有group by
.
其次,你想要一个left join
:
SELECT i.name, COUNT(o.id)
FROM Item i LEFT JOIN
Order o
ON i.id = o.it_id AND
o.date >= '2021-01-08'
GROUP BY i.name;
另请注意,日期采用标准格式,并且条件移动到ON
子句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句