 # Calculate metrics in recurse query

Hi, I use recurse query to show users which points to their subordinates with an uid predicate named ~member_next_level_of . And I would like to count the number of subordinates (both direct and indirect) of every user in this query.

For example, userA has a subordinate named userB; userB has two subordinates named userC and userD, thus the result would be userA has 3 subordinates, userB has 2 subordinates, userC and userD have 0 subordinate.

Here is the query block:

``````{
q as event(func: allofterms(member_id, "4114396")) @recurse(loop: false) {
member_id
member_name
a as ~member_next_level_of

}

var(func: uid(q,a)){
count1 as math(1)
~member_next_level_of {
count2 as count2: math(count1)
~member_next_level_of{
count3 as math(count2)
~member_next_level_of{
count4 as math(count3)
}
sum_count4 as sum(val(count4))
}
sum_count3 as sum(val(count3))
sum_total3 as sum(val(sum_count4))
total3 as math(sum_count3 + sum_total3)
}
sum_count2 as sum(val(count2))
sum_total as sum(val(total3))
total as  math(sum_count2 + sum_total  + count1 -1)

}

countname(func:uid(total)){
uid
member_name
val(total)
}

}
``````

Obviously, I had to organize the attribute structure manually to calculate the total number of subordinates of every user.

Can I use a better query method?

Does the community have a development plan to provide direct aggregation for in the future? Beause I have 9 levels for all users which is difficult to organize the query block.