sql - 从一个表中获取行,并从相关表中获取 COUNT

标签 sql database postgresql

我正在尝试构建一个 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 JOINcustomers 是第二张表:

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/

相关文章:

mysql - 选择与三个表不同的查询

json - 如何表示NOSQL类型的数据存储格式

linux - orientdb 连接无效的密码和用户名

ruby-on-rails - 正确安装 pg gem 时出现问题

php - 使用 $row->element 而不是 $row ["element"的数据库查询(while 或 foreach)]

sql - 如果一个元素在 postgresql 中的 2 个数组中匹配,则返回 bool 值

开发中的 Rails 3 优化工具?

sql - 使用 IN 或子查询到另一个表的 where 查询速度更快吗?

Mysql "select * from"没有返回所有行

sql - 必须在存储过程中声明标量变量 "@bit"作为输出参数