2016-03-08 36 views
1

我有表: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嗎? –

回答

0

您需要將父母和孩子都聚合在一起。像這樣的東西應該是關閉的:

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