- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Wed, 07 Dec 2011 13:00:23 +0000
- To: public-rdf-dawg@w3.org
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