我正在尝试构建一个 SQL 查询,其中我获取一个表的信息 (WHERE shops.shop_domain = X
) 以及客户表的 COUNT WHERE customers.product_id = 4242451
。
商店表中没有 product.id
,但客户表中有 shop_domain
,因此我尝试进行某种连接。
我基本上想返回以下内容:
- 商店.id
- 店铺名称
- shops.shop_domain
- 客户数量,其中 customers.product_id = '4242451'
这是我不太可爱的查询尝试。 我认为我的想法是正确的(也许...),但我无法全神贯注于构建此查询。
SELECT shops.id, shops.name, shops.shop_domain, COUNT(customers.customer_id)
FROM shops
LEFT JOIN customers ON shops.shop_domain = customers.shop_domain
WHERE shops.shop_domain = 'myshop.com' AND
customers.product_id = '4242451'
GROUP BY shops.shop_id
相关数据库模式:
shops:
id, name, shop_domain
customers:
id, name, product_id, shop_domain
最佳答案
你很接近。 customers
的条件需要放在 ON
子句中,因为这是一个 LEFT JOIN
而 customers
是第二张表:
SELECT s.id, s.name, s.shop_domain, COUNT(c.customer_id)
FROM shops s LEFT JOIN
customers c
ON s.shop_domain = c.shop_domain AND c.product_id = '4242451'
WHERE s.shop_domain = 'myshop.com'
GROUP BY s.id, s.name, s.shop_domain;
我也倾向于在 GROUP BY
中包括所有三列,尽管 Postgres(和 ANSI/ISO 标准)对 id
很满意,如果它被声明为表中的主键。
关于sql - 从一个表中获取行,并从相关表中获取 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53288179/