1

我有一个产品表和一个已购买产品的用户表。在 products 表 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

我会使用 a 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

对迈克尔的查询进行了微小的更改。

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 回答