通过加入计数和分组

时间:2012-09-28 18:27:54

标签: mysql sql

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

我无法弄清楚如何获得每行购买的产品数量。

e.g。在表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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

以上查询不会退回尚未购买的商品。