使用SQL的JOIN列出和计数项目

问题描述

我正在尝试从以下两个表中建立基本的融洽关系:

餐桌产品

|--------|----------------|----------|
| PRO_Id | PRO_CategoryId | PRO_Name |
|--------|----------------|----------|
|      1 |             98 | Banana   |
|      2 |             98 | Apple    |
|--------|----------------|----------|

表格类别

|--------|----------|
| CAT_Id | CAT_Name |
|--------|----------|
|     98 | Fruits   |
|     99 | Other    |
|--------|----------|

我需要的是以下输出

|------------|
| Categories |
|------------|
| Fruits (2) |
|------------|

我想要一份报告,列出Categories的所有类别,但仅当Products的产品具有链接(“水果”是个案形式,而“其他”则不是)。

这实际上是我所在的地方

SELECT CAT_Name,COUNT(PRO_Name IN sum)
FROM Categories
JOIN Products
ON Products.PRO_CategoryId = Categories.CAT_Id as sum
ORDER BY CAT_Name ASC

有人帮助我吗?

谢谢。

解决方法

您非常接近。您需要摆脱查询中的垃圾并使用group by

SELECT c.cat_name,COUNT(*)
FROM Categories c JOIN
     Products p
     ON p.PRO_CategoryId = c.CAT_Id
GROUP BY c.CAT_Name ;

注意:

  • SELECT *不适合用于聚合查询。您要选择的是。
  • 这将计数放在单独的列中,尽管有抽样结果,但这似乎是您的意图。
  • COUNT(pro_name in sum)没有道理。
  • as sum没有道理。