- 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