- From: Steve Harris <steve.harris@garlik.com>
- Date: Tue, 6 Dec 2011 22:40:49 +0000
- To: SPARQL Working Group <public-rdf-dawg@w3.org>
- Cc: Andy Seaborne <andy.seaborne@epimorphics.com>, birte.glimm@uni-ulm.de
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) } }
Result = OrderBy(Extend(Extend(J, ?min, agg2), ?max, agg1), agg3)
I'm now going to look at the @@s from earlier today.
- Steve
--
Steve Harris, CTO, Garlik Limited
1-3 Halford Road, Richmond, TW10 6AW, UK
+44 20 8439 8203 http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10 9AD
Received on Tuesday, 6 December 2011 22:41:21 UTC