module Opaleye.Aggregate (module Opaleye.Aggregate, Aggregator) where
import qualified Opaleye.Internal.Aggregate as A
import Opaleye.Internal.Aggregate (Aggregator)
import Opaleye.QueryArr (Query)
import qualified Opaleye.Internal.QueryArr as Q
import qualified Opaleye.Column as C
import qualified Opaleye.Internal.HaskellDB.PrimQuery as HPQ
import GHC.Int (Int64)
groupBy :: Aggregator (C.Column a) (C.Column a)
groupBy = A.makeAggr' Nothing
sum :: Aggregator (C.Column a) (C.Column a)
sum = A.makeAggr HPQ.AggrSum
count :: Aggregator (C.Column a) (C.Column Int64)
count = A.makeAggr HPQ.AggrCount
avg :: Aggregator (C.Column Double) (C.Column Double)
avg = A.makeAggr HPQ.AggrAvg
aggregate :: Aggregator a b -> Query a -> Query b
aggregate agg q = Q.simpleQueryArr (A.aggregateU agg . Q.runSimpleQueryArr q)