我有一张产品表和一张购买产品的用户表。在产品表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
答案 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
以上查询不会退回尚未购买的商品。