选择按另一列SQL分组的列数

时间:2013-02-05 03:23:20

标签: sql count group-by

我有两个表,一个名为Products,另一个名为Products_Category。我想显示每个类别的库存盘点(按类别分组),并显示类别的名称。 Products表具有每个Product的库存计数,但Products_Category表具有Category名称。如何将两者一起显示?我应该使用某种加入吗?

这是我想要的:

Category_Name --------- Sum(Products_Inventory)

------书籍-------------------- 1 ----------
------玩具---------------------- 2 ----------

但截至目前,我能够显示的是 ID 类别,而不是类别 name ,如下所示:

------- 1 ------------------------ 1 ----------
------- 2 ------------------------ 2 ----------

3 个答案:

答案 0 :(得分:1)

使用JOINGROUP BY

SELECT PC.Category_Name, Sum(P.Products_Inventory)
FROM Products_Category PC
   INNER JOIN Products P ON PC.ProductId = P.ProductId
GROUP BY PC.Category_Name

BTW - 假设您在每个表中都有一个ProductId字段。如果我可以提出建议,你也应该有一个分类表(更适合规范化)。将ProductId和CateogryId存储在Products_Category表中。

祝你好运。

答案 1 :(得分:0)

对于这些查询,我假设product_id在两个表上(如果我猜错了,你必须使用正确的字段名)。我还使用Product_Category.description作为具有类别名称的字段的名称。

此查询将为您提供所有类别,并为Product表中的任何产品类别提供0的计数。

如果Product包含库存中每个产品的一条记录(即4本书意味着4 Product条记录),则COUNT()是您的功能想。

SELECT Products_Category.description, COUNT(Product.product_id) AS category_count
FROM Products_Category
   LEFT OUTER JOIN Products ON Products_Category.product_id=Products.product_id
GROUP BY Products_Category.description

如果Product包含库存中每种类型产品的一条记录(即4本书意味着1条记录,其中product_count为4条),则{{1}是你想要的功能。

SUM()

如果您只想要在该类别中有广告资源时返回的记录,请将SELECT Products_Category.description, SUM(Product.product_count) AS category_count FROM Products_Category LEFT OUTER JOIN Products ON Products_Category.product_id=Products.product_id GROUP BY Products_Category.description 更改为LEFT OUTER JOIN

INNER JOIN

答案 2 :(得分:0)

最简单的方法就是这样做..

选择a.Category_Name,Sum(b.Products_Inventory)
FROM Products_Category a,产品b
其中a.ProductId = b.ProductId
GROUP BY a.Category_Name

希望有所帮助