首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL连接两个表以进行聚合?

使用MySQL连接两个表以进行聚合?
EN

Stack Overflow用户
提问于 2012-02-25 09:32:44
回答 3查看 87关注 0票数 1

我需要连接表来进行聚合。我在这方面很烂。这是我的场景:

代码语言:javascript
复制
CATEGORIES
CatID | CategoryName | Parent
1     | Cars         | NULL
2     | Electronics  | NULL
3     | DVD          | 2
4     | Blu_ray      | 2
5     | Shoes        | NULL

所以基本上,最顶层的元素没有父元素。然后我有

代码语言:javascript
复制
PRODUCTS
ProdID | Prod Name        | CatID
1      | DVD Player 1     | 3
2      | Blu-Ray Player   | 3
3      | Nike             | 5
4      | DVD Player 2     | 3

我想以..。

代码语言:javascript
复制
CATEGORIES
CatID | CategoryName | Parent | totalProds
1     | Cars         | NULL   | 0
2     | Electronics  | NULL   | 0
3     | DVD          | 2      | 2
4     | Blu_ray      | 2      | 1
5     | Shoes        | NULL   | 1

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-25 09:36:35

你不是在问每个类别的产品总数吗?

代码语言:javascript
复制
SELECT CatID, CategoryName, Parent, COUNT(*) totalProds
FROM categories c
INNER JOIN products p ON p.CatID = c.CatID
GROUP BY CatId
票数 1
EN

Stack Overflow用户

发布于 2012-02-25 09:59:14

请参见下面的查询

代码语言:javascript
复制
SELECT
    c.`CatID`,
    c.`CategoryName`,
    c.`Parent`,
    COALESCE(COUNT(DISTINCT p.`ProdID`),0) AS totalProds
FROM `CATEGORIES` c
LEFT JOIN `PRODUCTS` p
ON p.`CatID` = c.`CatID`
ORDER BY c.`CatID`

LEFT JOIN为每个类别返回一行。COALESCE,以确保在适当的情况下返回0。

票数 0
EN

Stack Overflow用户

发布于 2012-02-25 10:50:13

假设您有有限数量的类别级别,您可以一次合并每个级别。以下是4个级别:

代码语言:javascript
复制
SELECT c1.CatID, c1.CategoryName, c1.Parent, COUNT(1) totalProds
FROM products p 
INNER JOIN categories c1 ON c1.CatID = p.CatID
GROUP BY c1.CatID, c1.CategoryName, c1.Parent
UNION
SELECT c2.CatID, c2.CategoryName, c2.Parent, COUNT(1) 
FROM products p 
INNER JOIN categories c1 ON c1.CatID = p.CatID
INNER JOIN categories c2 ON c2.CatID = c1.Parent
GROUP BY c2.CatID, c2.CategoryName, c2.Parent
UNION
SELECT c3.CatID, c3.CategoryName, c3.Parent, COUNT(1) 
FROM products p 
INNER JOIN categories c1 ON c1.CatID = p.CatID
INNER JOIN categories c2 ON c2.CatID = c1.Parent
INNER JOIN categories c3 ON c3.CatID = c2.Parent
GROUP BY c3.CatID, c3.CategoryName, c3.Parent
UNION
SELECT c4.CatID, c4.CategoryName, c4.Parent, COUNT(1) 
FROM products p 
INNER JOIN categories c1 ON c1.CatID = p.CatID
INNER JOIN categories c2 ON c2.CatID = c1.Parent
INNER JOIN categories c3 ON c3.CatID = c2.Parent
INNER JOIN categories c4 ON c4.CatID = c3.Parent
GROUP BY c4.CatID, c4.CategoryName, c4.Parent

希望你明白我的意思。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9440313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档