sales-report.vala 1020 B

1234567891011121314151617181920212223242526
  1. using InvercargillSql.Orm;
  2. using InvercargillSql.Orm.Projections;
  3. /**
  4. * Aggregate projection demonstrating GROUP BY and aggregate functions.
  5. */
  6. public class SalesReport : Object {
  7. public string category { get; set; }
  8. public int64 total_orders { get; set; }
  9. public double total_revenue { get; set; }
  10. public double avg_order_value { get; set; }
  11. public SalesReport() {
  12. category = "";
  13. }
  14. public static void configure_projection(ProjectionBuilder<SalesReport> p) throws ProjectionError {
  15. p.source<Order>("o")
  16. .join<Product>("p", "o.product_id == p.id")
  17. .group_by("p.category")
  18. .select<string>("category", "p.category", (x, v) => x.category = v)
  19. .select<int64?>("total_orders", "COUNT(o.id)", (x, v) => x.total_orders = v)
  20. .select<double?>("total_revenue", "SUM(o.total)", (x, v) => x.total_revenue = v)
  21. .select<double?>("avg_order_value", "AVG(o.total)", (x, v) => x.avg_order_value = v);
  22. }
  23. }