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。
答
您需要将父母和孩子都聚合在一起。像这样的东西应该是关闭的:
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
你知道最大数量的父母/子女关系吗?如果没有,因为'mysql'不支持递归类型,这将更加困难,并且需要'动态sql' ...或者你可以用'用户定义变量'和子查询来做到这一点。 – sgeddes
@sgeddes:我编辑数据表类别。 例如:父/子关系的最大数目= 2 你可以写一个sql吗? –