From 2e257aa99d8f8840e2a0fa2676c516cd95437afe Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Mon, 25 Jun 2018 13:49:26 -0500 Subject: [PATCH] Optimize the payment amount calculation for supporters --- lib/query/query_supporters.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/query/query_supporters.rb b/lib/query/query_supporters.rb index 26e4a4e8..27eeaf3d 100644 --- a/lib/query/query_supporters.rb +++ b/lib/query/query_supporters.rb @@ -143,8 +143,18 @@ module QuerySupporters # Perform all filters and search for /nonprofits/id/supporters dashboard and export def self.full_filter_expr(np_id, query) - payments_subquery = Qx.select("supporter_id", "SUM(gross_amount)", "MAX(date) AS max_date", "MIN(date) AS min_date", "COUNT(*) AS count") - .from(:payments) + payments_subquery = + Qx.select("supporter_id", "SUM(gross_amount)", "MAX(date) AS max_date", "MIN(date) AS min_date", "COUNT(*) AS count") + .from( + Qx.select("supporter_id", "date", "gross_amount") + .from(:payments) + .join(Qx.select('id') + .from(:supporters) + .where("supporters.nonprofit_id = $id and deleted != 'true'", id: np_id ) + .as("payments_to_supporters"), "payments_to_supporters.id = payments.supporter_id" + ) + .as("outer_from_payment_to_supporter") + .parse) .group_by(:supporter_id) .as(:payments)