5

[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

もちろん問題は、このクエリが 1 回の販売と 0 回の販売の Products を区別できないことです。

では、この非常に単純なデータセットを取得するにはどうすればよいでしょうか?

4

1 に答える 1

9

don't use COUNT(*) but instead, 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

As a sidenote, you should specify all the non-aggregated columns in the GROUP BY clause.

于 2013-05-17T00:05:43.280 に答える