Re: Aggregates

On 06/12/11 22:40, Steve Harris wrote:
> Hi all,
>
> I've now got the aggregates in a state where I think all the information is carried through from one end of the query to the other… but I've thought that before :)
>
> I also think ORDER BY is covered.
>
> Here's a sketch of what I think should be happening:
>
> Data
>
> <a>  <p>  1 .
> <a>  <p>  2 .
> <b>  <p>  3 .
>
> Query
>
> SELECT (MAX(?o) AS ?max) (MIN(?o) AS ?min)
> WHERE { ?s ?p ?o }
> GROUP BY ?s
> ORDER BY AVG(?o)
>
>
> Ω = Sol  ?s   ?p   ?o
>      μ1<a>   <p>   1
>      μ2<a>   <p>   2
>      μ3<b>   <p>   3
>
> G = Group((?s), Ω)
>    = { ((<a>), { μ1, μ2 }), ((<b>), { μ3 }) }
>
> Q = SELECT agg1 agg2
>      WHERE { ?s ?p ?o }
>      GROUP BY ?s
>      ORDER BY agg3
>
> E = { (?max, agg1), (?min, agg2) }
>
> A1 = Aggregation((?o), Max, {}, G)
> A2 = Aggregation((?o), Min, {}, G)
> A3 = Aggregation((?o), Avg, {}, G)
>
> J = AggregateJoin(A) =
>    { { (agg1, 2), (agg2, 1), (agg3, 1.5) }
>      { (agg1, 3), (agg2, 3), (agg3, 3) } }


This is the evaluation of AggregateJoin at execution time.

I don't understand this step: how does it know the variables are agg1, 
agg2, and agg3? There could be other agg_i from other query levels. And 
why this order not agg3, agg2, agg1?

eval(D(G), AggregateJoin(A)) =
    { (agg1, v1), ..., (aggn, vn) | vi such that ( k, vi ) in eval(D(G), 
Ai) for some k and each 1 <= i <= n }

 Andy


>
> Result = OrderBy(Extend(Extend(J, ?min, agg2), ?max, agg1), agg3)
>
>
> I'm now going to look at the @@s from earlier today.
>
> - Steve
>

Received on Wednesday, 7 December 2011 13:01:02 UTC