SUM和组通过与PARENT_ID

问题描述:

我有表:SUM和组通过与PARENT_ID

分类

+----+-----------+---------------+ 
| id | parent_id | name   | 
+----+-----------+---------------+ 
| 1 |  NULL | Dong ho nam | 
| 2 |   1 | dong ho nam 1 | 
| 3 |   1 | dong ho nam 2 | 
| 4 |   1 | dong ho nam 3 | 
| 5 |   1 | dong ho nam 4 | 
| 6 |  NULL | Dong ho nu | 
| 7 |   6 | Dong ho nu 1 | 
| 8 |   6 | Dong ho nu 2 | 
| 9 |   6 | Dong ho nu 3 | 
+----+-----------+---------------+ 

和表产品

+----+-------------+---------------+ 
| id | category_id | quantity  | 
+----+-------------+---------------+ 
| 1 |   6 | 10   | 
| 2 |   3 | 2    | 
| 3 |   3 | 4    | 
| 4 |   2 | 12   | 
| 5 |   4 | 6    | 
| 6 |   2 | 0    | 
| 7 |   6 | 8    | 
| 8 |   8 | 22   | 
| 9 |   9 | 4    | 
+----+-------------+---------------+ 

我要选择类别,金额(数量)
//(所有数量的产品都属于类别和类别.pa rent_id = NULL)

结果

+----+-----------+---------------+-----------+ 
| id | parent_id | name   | quantity | 
+----+-----------+---------------+-----------+ 
| 1 |  NULL | Dong ho nam |  24 | 
| 6 |  NULL | Dong ho nu |  44 | 
+----+-----------+---------------+-----------+ 

如何使用SQL查询(或轨道)可以实现上述结果。 tks。

+0

你知道最大数量的父母/子女关系吗?如果没有,因为'mysql'不支持递归类型,这将更加困难,并且需要'动态sql' ...或者你可以用'用户定义变量'和子查询来做到这一点。 – sgeddes

+0

@sgeddes:我编辑数据表类别。 例如:父/子关系的最大数目= 2 你可以写一个sql吗? –

您需要将父母和孩子都聚合在一起。像这样的东西应该是关闭的:

select c.id, p.quantity + coalesce(sum(p2.quantity),0) 
from categories c 
    join (
     select category_id, sum(quantity) quantity 
     from products 
     group by category_id) p on c.id = p.category_id 
    left join categories c2 on c.id = c2.parent_id 
    left join products p2 on c2.id = p2.category_id 
where c.parent_id is null 
group by c.id