- 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