# Re: Semantics of SUM

From: Andy Seaborne <andy.seaborne@talis.com>
Date: Thu, 12 Nov 2009 20:10:11 +0000
Message-ID: <4AFC6BA3.5060603@talis.com>
To: Steve Harris <steve.harris@garlik.com>
CC: RDF Data Access Working Group <public-rdf-dawg@w3.org>
```

On 12/11/2009 15:47, Steve Harris wrote:
> On 11 Nov 2009, at 10:46, Andy Seaborne wrote:
>> On 10/11/2009 18:47, Steve Harris wrote:
>>>
>>>> I don't see that COALESCE helps because there isn't an intermediate
>>>> variable representing the sum so far.
>>>
>>> I think the idea was something like:
>>>
>>> SELECT SUM(COALESCE(xsd:double(?x), 0))
>>> WHERE {
>>> <x> <value> ?x .
>>> }
>>
>> Thanks - I'd missed that.
>
> To be clear, it's just my recollection of what we discussed, I don't
> think anything specific was in the minutes.
>
>> However, it does not quite follow the semantics of "+" because it
>> changes the datatype:
>>
>> SUM(?x | ?x{1,2,3} ) ==> "6"^^xsd:integer

Notation was meant to be SUM(?x) over a group with ?x=1 ,?x=2, ?x=3
It was a bit terse - had been writing comprehensions just before hand so
it was obvious to me, at the time.

>> but
>>
>> SUM(COALESCE(xsd:double(?x), 0) | ?x{1,2,3} ) => "6"^^xsd:double

Using
SUM(COALESCE(xsd:double(?x), 0))
for group members ?x=1,2,3 (xsd:integers) results in xsd:double, not
xsd:integer as it would for 1+2+3

>>
>> Using xsd:integer does not work e.g. 1, 1.5, 3 !=> "5.5"^^xsd:decimal

Encoding the full XSD hierarchy to minimise the promotion as + used
natively does, and cope with errors/non-numbers might be:

COALESCE(xsd:integer(?x), xsd:decimal(?x), xsd:double(?x), 0)

which I don't think is a serious contender on practical grounds.

I think ending up with xsd:double, not xsd:integer, in the potential
present of errors, is significant so maybe a way to indicate that errors
be excluded might be a better.  However, a plethora of options is also

I do wonder if SUM should filter out errors/unbound before delegating to
discussions - I can only see a short section on this and mostly it's

((
The full version is possibly
COALESCE(xsd:integer(?x), xsd:decimal(?x) ,
xsd:float(?x),  xsd:double(?x), 0)
if the system has floats and the app cares.

Second table in
http://www.w3.org/TR/xpath-functions/#op.numeric
))

Sorry for the confusing notation earlier,

Andy
```
Received on Thursday, 12 November 2009 20:10:29 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:00:58 UTC