Per
Group aggregation context for computing per-group aggregates.
Use this class to perform aggregations within groups defined by specific values.
Methods
Section titled “Methods”.sum()
Section titled “.sum()”Per.sum(*args: AggValue) -> AggregateCompute sum per group.
Parameters:
(*argsAggValue, default:()) - Values to sum within each group.
Returns:
Aggregate- AnAggregateexpression for per-group sum. ReturnsNumberif the input isNumber, orFloatif the input isFloat.
Examples:
Sum order amounts per customer:
>>> select(Customer, aggregates.sum(Order.amount).per(Customer).where(Order.customer == Customer)).count()
Section titled “.count()”Per.count(*args: AggValue) -> AggregateCount values per group.
Parameters:
(*argsAggValue, default:()) - Values to count within each group.
Returns:
Aggregate- AnAggregateexpression for per-group count. ReturnsInteger.
Examples:
Count employees per department:
>>> select(Department, aggregates.count(Employee).per(Department).where(Employee.department == Department)).min()
Section titled “.min()”Per.min(*args: AggValue) -> AggregateFind minimum per group.
Parameters:
(*argsAggValue, default:()) - Values to find minimum from within each group.
Returns:
Aggregate- AnAggregateexpression for per-group minimum. Returns the same type as the input.
Examples:
Find minimum salary per department:
>>> select(Department, aggregates.min(Employee.salary).per(Department).where(Employee.department == Department)).max()
Section titled “.max()”Per.max(*args: AggValue) -> AggregateFind maximum per group.
Parameters:
(*argsAggValue, default:()) - Values to find maximum from within each group.
Returns:
Aggregate- AnAggregateexpression for per-group maximum. Returns the same type as the input.
Examples:
Find maximum order amount per customer:
>>> select(Customer, aggregates.max(Order.amount).per(Customer).where(Order.customer == Customer)).avg()
Section titled “.avg()”Per.avg(*args: AggValue) -> AggregateCompute average per group.
Parameters:
(*argsAggValue, default:()) - Values to average within each group.
Returns:
Aggregate- AnAggregateexpression for per-group average. ReturnsScaledNumberif the input isNumber, orFloatif the input isFloat.
Examples:
Compute average salary per department:
>>> select(Department, aggregates.avg(Employee.salary).per(Department).where(Employee.department == Department)).string_join()
Section titled “.string_join()”Per.string_join(*args: AggValue, sep="", index=1) -> AggregateJoin strings per group.
Parameters:
(*argsAggValue, default:()) - String values to join within each group.
(, default:sep"") - Separator string. Default: empty string.
(, default:index1) - Index parameter. Default: 1.
Returns:
Aggregate- AnAggregateexpression for per-group string join. ReturnsString.
Examples:
Join employee names per department:
>>> select(Department, aggregates.string_join(Employee.name, sep=", ").per(Department).where(Employee.department == Department)).rank()
Section titled “.rank()”Per.rank(*args: AggValue | Ordering) -> AggregateCompute rank per group.
Parameters:
(*argsAggValue|Ordering, default:()) - Values or Ordering specs to rank by within each group.
Returns:
Aggregate- AnAggregateexpression for per-group rank. ReturnsInteger.
Examples:
Rank employees by salary within each department:
>>> select(Employee, aggregates.rank(aggregates.desc(Employee.salary)).per(Department).where(Employee.department == Department)).limit()
Section titled “.limit()”Per.limit(limit_: int, *args: AggValue | Ordering) -> AggregateLimit results per group.
Parameters:
(limit_int) - Maximum results per group.
(*argsAggValue|Ordering, default:()) - Values or Ordering specs to order by.
Returns:
Aggregate- AnAggregateexpression for per-group limited results.
Examples:
Get top 3 employees per department by salary:
>>> select(Employee).where(aggregates.limit(3, aggregates.desc(Employee.salary)).per(Department).where(Employee.department == Department)).rank_asc()
Section titled “.rank_asc()”Per.rank_asc(*args: AggValue) -> AggregateCompute ascending rank per group.
Parameters:
(*argsAggValue, default:()) - Values to rank in ascending order within each group.
Returns:
Aggregate- AnAggregateexpression for per-group ascending rank. ReturnsInteger.
Examples:
Rank products by price within each category (lowest first):
>>> select(Product, aggregates.rank_asc(Product.price).per(Category)).rank_desc()
Section titled “.rank_desc()”Per.rank_desc(*args: AggValue) -> AggregateCompute descending rank per group.
Parameters:
(*argsAggValue, default:()) - Values to rank in descending order within each group.
Returns:
Aggregate- AnAggregateexpression for per-group descending rank. ReturnsInteger.
Examples:
Rank products by sales within each category (highest first):
>>> select(Product, aggregates.rank_desc(Product.sales).per(Category).where(Product.category == Category)).top()
Section titled “.top()”Per.top(limit: int, *args: AggValue) -> AggregateGet top N per group.
Parameters:
(limitint) - Number of top results per group.
(*argsAggValue, default:()) - Values to order by (descending).
Returns:
Aggregate- AnAggregateexpression for per-group top N.
Examples:
Get top 5 products by revenue per store:
>>> select(Product).where(aggregates.top(5, Product.revenue).per(Store).where(Product.store == Store)).bottom()
Section titled “.bottom()”Per.bottom(limit: int, *args: AggValue) -> AggregateGet bottom N per group.
Parameters:
(limitint) - Number of bottom results per group.
(*argsAggValue, default:()) - Values to order by (ascending).
Returns:
Aggregate- AnAggregateexpression for per-group bottom N.
Examples:
Get bottom 3 products by sales per category:
>>> select(Product).where(aggregates.bottom(3, Product.sales).per(Category).where(Product.category == Category))Inheritance Hierarchy
Section titled “Inheritance Hierarchy”Returned By
Section titled “Returned By”semantics > std > aggregates └── per