diff --git a/src/metabase/driver/generic_sql/query_processor.clj b/src/metabase/driver/generic_sql/query_processor.clj
index 6c7728ead403eee88b01767e69d8c80e285fb8d6..3820f145cb61bf616fa1a4de116a6dfd796bba6c 100644
--- a/src/metabase/driver/generic_sql/query_processor.clj
+++ b/src/metabase/driver/generic_sql/query_processor.clj
@@ -219,26 +219,14 @@
            first
            (= "cum_sum")))
 
-(defn- cumulative-sum
-  "Recursively cumulative sum a sequence of VALUES."
-  ([values]
-   {:pre [(sequential? values)
-          (every? number? values)]}
-   (cumulative-sum 0 [] values))
-  ([acc-sum acc-values [value & more]]
-   (let [acc-sum (+ acc-sum value)
-         acc-values (conj acc-values acc-sum)]
-     (if-not (seq? more) acc-values
-             (recur acc-sum acc-values more)))))
-
 (defn- apply-cumulative-sum
-  "Apply `cumulative-sum` to values of the aggregate `Field` in RESULTS."
+  "Cumulative sum the values of the aggregate `Field` in RESULTS."
   {:arglists '([query results])}
   [{[_ field-id] :aggregation} results]
   (let [field (field-id->kw field-id)
         values (->> results          ; make a sequence of cumulative sum values for each row
                     (map field)
-                    cumulative-sum)]
+                    (reductions +))]
     (map (fn [row value]              ; replace the value for each row with the cumulative sum value
            (assoc row field value))
          results values)))
diff --git a/test/metabase/driver/generic_sql/query_processor_test.clj b/test/metabase/driver/generic_sql/query_processor_test.clj
index 4e885683f6adfafd9d873c39ddb84465f7154e6b..bef80343a9e4f49e638b0c2e9a089975ca90c21d 100644
--- a/test/metabase/driver/generic_sql/query_processor_test.clj
+++ b/test/metabase/driver/generic_sql/query_processor_test.clj
@@ -387,6 +387,7 @@
 ;; # POST PROCESSING TESTS
 
 ;; ## CUMULATIVE SUM
+
 ;; ### Simple cumulative sum w/o any breakout
 (expect {:status :completed
          :row_count 15