W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > April to June 2012

Re: Nested Aggregate Expressions

From: Steve Harris <steve.harris@garlik.com>
Date: Mon, 4 Jun 2012 23:45:37 +0100
Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
Message-Id: <29123E88-F25E-4826-853A-A916FFC92A4E@garlik.com>
To: Andy Seaborne <andy.seaborne@epimorphics.com>
On 3 Jun 2012, at 16:03, Andy Seaborne wrote:

> Can aggregate expressions contain aggregates?
> 
> This comes from a recent email [1] and while these may well not actually address the application goal (a subquery was meant - see thread), the SPARQL 1.1 Query spec does permit these unusual queries.
> 
> Example:
> 
> PREFIX ex: <http://example.org/meals#>
> SELECT (AVG(?mealPrice * (1.0 + MAX( ?mealTip / ?mealPrice)))
>           AS ?avgCostWithBestTip)
> WHERE {
>  ?description ex:mealPrice ?mealPrice .
>  ?description ex:mealTip ?mealTip .
> } GROUP BY ?description
> 
> i.e.an aggregate inside an aggregate:  AVG(?x * MAX (?y) )
> 
> 
> One line of argument is that the expression inside the aggregate is applied to each row, so only row variables should be considered in-scope.  The aggregate AVG(max(?x)+1) is violating that as max(?x) is not a per-row expression.
> 
> 
> What ARQ does is to calculate the aggregates of a group as the group streams past; it does not wait until the end of evaluation of the whole block when all the elements of all the groups are known.
> 
> 
> Related to this is the interaction with select expressions:
> 
> SELECT (max(?x) As ?M) (avg(?M+1) AS ?A)
> 
> because the select expression rules say you can use ?M inside AVG().
> 
> If we wish to forbid this, we can do it quite easily by having a parser rule that aggregates can't appear in expression for the aggregate, which is a simple static check.

Oh boy, it's certainly wacky.

That parse rule wouldn't rule out the use of ?M above though anyway, would it?

- Steve

-- 
Steve Harris, CTO
Garlik, a part of Experian 
1-3 Halford Road, Richmond, TW10 6AW, UK
+44 20 8439 8203  http://www.garlik.com/
Registered in England and Wales 653331 VAT # 887 1335 93
Registered office: Landmark House, Experian Way, NG2 Business Park, Nottingham, Nottinghamshire, England NG80 1ZZ
Received on Monday, 4 June 2012 22:48:58 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:48 GMT