【问题标题】:How to count from two table using JOIN and GROUP BY如何使用 JOIN 和 GROUP BY 从两个表中计数
【发布时间】:2015-10-23 14:49:16
【问题描述】:

我是一个新手,一直坚持这个案例 我有两张桌子

类别 - 猫号 - 猫名

产品 - 产品编号 - 猫号 - 产品名称

我想在显示带有计数产品的类别时计算类别中有多少产品,并且我正在使用此查询

SELECT * , COUNT(Product.ProductId) AS NumberProducts FROM Category
JOIN Product
ON Category.CatId = Product.CatId
GROUP BY Product.CatId

如果我在产品表中存在带有 catid 的产品,则此查询才有效,如果不是,我的类别不会显示在类别列表中,类别将消失。

请帮忙。提前致谢

【问题讨论】:

  • 确定你想要真正分组的列(不是 *)
  • select s.col1,s.col2,t.colA,count(t.colB) from table1 s join table2 t on (something) group by s.col1,s.col2,t.colA
  • Google 并了解 SQL 中的 GROUP BY 子句。
  • @Drew:我正在尝试您的建议,但它不起作用。也许我使用了不正确的语法:(
  • 如果您显示两个表的架构以及每个表的 show create table xxx 以及您真正想要显示的内容(而不是选择 *),我们会提供帮助

标签: php mysql


【解决方案1】:

选择 * 是问题所在 - 您正在寻找类别列表和产品数量。

你会得到你所要求的。 (c 和 p 是别名,让 SQL 更具可读性)

SELECT c.*, COUNT(p.ProductId) AS NumberProducts FROM Category as c
LEFT JOIN Product as p
ON c.CatId = p.CatId
GROUP BY c.CatId

生产

CatId   CategoryName    NumberProducts
1       T-Shirts        2
2       Sneakers        0
3       Boots           0 

希望对您有所帮助。

【讨论】:

  • 很高兴为您提供帮助@HienPham
  • 再次感谢 jpaljasma
【解决方案2】:
SELECT * , COUNT(Product.ProductId) AS NumberProducts FROM Category
LEFT JOIN Product
ON Category.CatId = Product.CatId
GROUP BY Product.CatId

左连接应该可以解决问题

【讨论】:

  • 我已经在使用 LEFT JOIN 但类别未显示为 0 产品。我尝试使用 LEFT OUTER JOIN 结果将返回第一个空类别和其他空不显示
  • 将 GROUP BY 更改为 Category.CatId 而不是 Product.CatId。然后它不会合并所有的空类别。
  • @Simon : 没有产品 (0) 的类别仍然没有出现:(
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2021-10-21
相关资源
最近更新 更多