大きなデータセットを集約して次のようなものを取得したい
SELECT SUM(`profit`) as `profit`, `month` FROM `t` GROUP BY `month`
だから、私はそのようにclojureのgroup-by関数を修正しました
(defn group-reduce [f red coll]
(persistent!
(reduce
(fn [ret x]
(let [k (f x)]
(assoc! ret k (red (get ret k) x))))
(transient {}) coll)))
そして、ここに使用法があります:
(group-reduce :month (fn [s x]
(if s
(assoc s :profit (+ (:profit s) (:profit x)))
x))
[{:month 10 :profit 12}
{:month 10 :profit 15}
{:month 12 :profit 1}])
#_=> {10 {:profit 27, :month 10}, 12 {:profit 1, :month 12}}
動作しますが、clojure 標準ライブラリを使用してこれを行う別の方法があるのでしょうか?