and*_*ndy 2 sql postgresql join group-by count
假设我有一个[Products]表,并且[Products.record]可以有许多[Sales.records]与之关联.
我希望有一个数据集,它可以为我提供产品的销售数量.当然,产品可以零销售.
我的查询的第一个版本如下所示:
SELECT products.*,COUNT(*) as num_of_sales
LEFT OUTER JOIN sales ON sales.product_id = products.id
GROUP BY products.id
Run Code Online (Sandbox Code Playgroud)
问题当然是这个查询无法区分有1次销售和0次销售的产品.
那么,我怎样才能得到这个非常简单的数据集?
不要使用COUNT(*),而是COUNT(sales.product_id).
SELECT products.*,
COUNT(sales.product_id) as num_of_sales
LEFT OUTER JOIN sales
ON sales.product_id = products.id
GROUP BY products.id
Run Code Online (Sandbox Code Playgroud)
作为旁注,您应该在GROUP BY子句中指定所有非聚合列.