1

製品のテーブルと、製品を購入したユーザーのテーブルがあります。製品テーブル A には、製品が購入された場所を特定する site_name があります。

表 B は、ユーザーとユーザーが購入したものを示しています。

以下を使用して、購入した製品のリストを site_name ごとに表示し、製品名をグループ化しています。

SELECT product FROM A JOIN B ON A.prod_id = B.prod_id WHERE A.site_name = 'ebay' group by A.product

製品の表 A は次のとおりです。

prod_id
site_name
product

ユーザー用の表 B は次のとおりです。

user_id
prod_id

私が理解できないのは、ラインごとに購入された製品の数を取得する方法です。

たとえば、表Aには

prod_id    site_name    product
-------    ---------    -------
1          ebay         chair
2          amazon       desk
3          ebay         lamp

そしてテーブルbに

user_id    prod_id
-------    -------
1000         1
1001         2
1002         1
1003         3

したがって、site_name が ebay である各行と、購入された製品の数を示したいと思います。

chair    2
lamp     1
4

2 に答える 2

4

を使用してLEFT JOIN、一度も購入されたことのない製品がある場合、カウントが 0 で表示されるようにします。

また、条件を満たした行のみをカウントするようにCOUNT(users.prod_id)、 の代わりにを使用します。COUNT(*)LEFT JOIN

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    LEFT JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product
于 2012-09-28T18:31:29.563 に答える
1

Michaelのクエリに対するマイナーな変更。

SELECT
    products.product,
    COUNT(users.prod_id) AS productsBought
FROM
    A AS products
    INNER JOIN B AS users
        ON products.prod_id = users.prod_id
WHERE products.site_name = 'ebay'
GROUP BY products.product

上記のクエリでは、購入されていない商品は返されません。

于 2012-09-28T18:58:16.343 に答える