# Re: Aggregates

From: Andy Seaborne <andy.seaborne@epimorphics.com>
Date: Wed, 07 Dec 2011 13:00:23 +0000
Message-ID: <4EDF6367.7090907@epimorphics.com>

```

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

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:01:05 UTC