I have a list of categories, each category contains articles, each article has 3 kind of metrics:
all_data = [
%{category_id: 1, arcticle_id: 1, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
%{category_id: 1, arcticle_id: 62, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
%{category_id: 1, arcticle_id: 33, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
%{category_id: 12, arcticle_id: 3, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
%{category_id: 13, arcticle_id: 14, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
%{category_id: 12, arcticle_id: 6, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
]
I want to get rid of article by grouping categories with the same id and summing “val”'s. Something like this:
all_data2 = [
%{category_id: 1, data:[%{trait_id: 1, val: 9}, %{trait_id: 2, val: 39}, %{trait_id: 3, val: 1296}]},
%{category_id: 12, data:[%{trait_id: 1, val: 6}, %{trait_id: 2, val: 26}, %{trait_id: 3, val: 864}]},
%{category_id: 13, data:[%{trait_id: 1, val: 3}, %{trait_id: 2, val: 13}, %{trait_id: 3, val: 432}]},
]
What’s the best way to do this? I know I need to use reduce, but how exactly?