在SQL查询中包含COUNT个关联的最简单方法是什么?

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次销售的产品.

那么,我怎样才能得到这个非常简单的数据集?

Joh*_*Woo 5

不要使用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子句中指定所有非聚合列.