Re: Prioritised list of open issues (query, my bits)

On 09/02/2010 10:29 AM, Lee Feigenbaum wrote:
> Steve Harris wrote:
>> On 9 Feb 2010, at 09:00, Andy Seaborne wrote:
>>> On 08/02/2010 10:23 AM, Steve Harris wrote:
>>>> Can aggregate functions take DISTINCT as an argument a la SELECT
>>>> - Seems consensus on yes.
>>> A URI should name the function, not a collection of related
>>> functionality.
>>> Example:
>>> How do you name the difference if they are not different URIs?
>> In my view, DISTINCT does not change the function, it changes the
>> (multi)set that the function is applied to, c.f.
>> More concretely, you form a DISTINCT multiset of the bound values of
>> ?x, then apply the count function to the resulting set.
> FWIW, this is exactly how Glitter treats the DISTINCT modifier for both
> built-in and custom aggregates. It modified the set of solutions passed
> to the aggregate function.

The defn in the doc applies it to the values of expressions of the 
aggregate function (aside, so no seeing the expressions themselves, only 
the result of after evaluation).

If we have, in one partition:

(?x=1, ?y=2)
(?x=1, ?y=3)
(?x=2, ?y=3)

which is a set of solutions.

I'd expect
   COUNT(DISTINCT ?x) ==> 2
   COUNT(DISTINCT fn:floor((?x+1)/2)) ==> 1

which is applying the DISTINCT after the implicit projection (case 1) 
and after expression evaluation (case 2).

I thought Steve and I were mostly agreeing, except over whether one can 
name the DISTINCT and non-DISTINCT versions with URIs.

And, maybe, the treatmeant of * - I prefer a treatment that passes 
solutions and expressions to the aggregate so * is not different.

But if the DISTINCT is on the solutions, then we differ in effect.


> Lee
>>> In custom aggregates, what does my:agg name?
>> The aggregate function, defined as per the aggregate functions in 9.2.
>> - Steve

Received on Tuesday, 9 February 2010 11:27:52 UTC