sum()#
#sum(*args: Producer, per: Optional[List[Producer]]) -> Expression
Calculates the sum of values produced by one or more Producer
objects.
Pass a list of one or more Producer
objects to the optional per
parameter to group values and compute the sum per group.
Must be called in a rule or query context.
Parameters#
Returns#
An Expression
object.
Example#
#import relationalai as rai
from relationalai.std import aggregates
model = rai.Model("people")
Person = model.Type("Person")
with model.rule():
Person.add(name="Joe", age=41)
Person.add(name="Jane", age=39)
with model.query() as select:
person = Person()
age_sum = aggregates.sum(person.age)
response = select(age_sum)
print(response.results)
# Output:
# v
# 0 80
person.age
represents the set of all ages in the model.
If two people have the same age, you must pass the person
instance,
in addition to person.age
, to sum()
so that each person contributes to the sum:
#import relationalai as rai
from relationalai.std import aggregates
model = rai.Model("people")
Person = model.Type("Person")
with model.rule():
Person.add(name="Joe", age=41)
Person.add(name="Jane", age=39)
Person.add(name="John", age=41)
with model.query() as select:
person = Person()
age_sum = aggregates.sum(person, person.age)
response = select(age_sum)
print(response.results)
# Output:
# v
# 0 121
When the query is evaluated,
all pairs of person
objects and their age
properties are formed, and the sum of the age values is computed.
You may pass any number of Producer
objects to sum()
.
The aggregation occurs over the values produced by the last argument.
To group values and compute the sum for each group,
pass one or more Producer
objects to the optional per
parameter as a list.
In the following example, the person
object is passed to per
to compute the sum of the ages of a person’s friends:
#import relationalai as rai
from relationalai.std import aggregates
model = rai.Model("friends")
Person = model.Type("Person")
with model.rule():
joe = Person.add(name="Joe", age=41)
jane = Person.add(name="Jane", age=39)
john = Person.add(name="John", age=41)
joe.set(friend=jane).set(friend=john)
jane.set(friend=joe)
john.set(friend=joe)
with model.query() as select:
person = Person()
friend_age_sum = aggregates.sum(person.friend, person.friend.age, per=[person])
response = select(person.name, friend_age_sum)
print(response.results)
# Output:
# name v
# 0 Jane 41
# 1 Joe 80
# 2 John 41