MySQL - 在 Left Join 中使用没有 Where 的计数

MySQL - Use Count Without Where in Left Join

我的table看起来如下:

产品

 id       title      price 
--------------------------------------
  5       777        15         
  6       777        16
  7       777        14

产品详情

 id       pid      quantity       color
--------------------------------------
  1       5       5               red
  2       5       5               yellow
  3       5       5               green
  4       6       6               yellow
  5       6       5               red
  6       7       5               red
  7       7       4               pink

我想要得到以下输出:

想要的结果

  id      title      price  numberofdetails quantity
------------------------------------------------------
  5       777        15         3           15
  6       777        16         2           11
  7       777        14         2           9

为了得到这个,我 运行 关注 mysql 查询:

查询

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) 
FROM products as p 
LEFT JOIN productdetails as pd 
ON p.id = pd.pid

写这个查询假设因为我已经定义了 products.id 和 productdetails.pid 之间的关系,它将 COUNT(pd.id) = 3。而不是只计算它显示的匹配行'7',总行数。如何修复我的查询以获得如上所示的所需结果。

你很接近。我想你只需要 GROUP BY:

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity)
FROM products p LEFT JOIN
     productdetails pd
     ON p.id = pd.pid
GROUP BY p.id, p.title, p.price;

在大多数数据库中,您的查询会 return 出错。但是,MySQL 扩展了 SQL 的定义,以允许 SELECT(例如 p.id)中不在 GROUP BY 中的列。由于聚合函数,您有一个聚合查询。没有 GROUP BY,它总是 return 一行,总结了所有数据。

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) FROM products p LEFT JOIN 产品详情 ON p.id = pd.pid 分组依据 p.id

按p.id分组就够了