using InvercargillSql.Orm; using InvercargillSql.Orm.Projections; /** * Aggregate projection demonstrating GROUP BY and aggregate functions. */ public class SalesReport : Object { public string category { get; set; } public int64 total_orders { get; set; } public double total_revenue { get; set; } public double avg_order_value { get; set; } public SalesReport() { category = ""; } public static void configure_projection(ProjectionBuilder p) throws ProjectionError { p.source("o") .join("p", "o.product_id == p.id") .group_by("p.category") .select("category", "p.category", (x, v) => x.category = v) .select("total_orders", "COUNT(o.id)", (x, v) => x.total_orders = v) .select("total_revenue", "SUM(o.total)", (x, v) => x.total_revenue = v) .select("avg_order_value", "AVG(o.total)", (x, v) => x.avg_order_value = v); } }