Aggregates

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