select sum() Frage

select sum() Frage

am 28.01.2007 21:28:13 von Kay Schulz

Hi
ich habe folgendes select statement:

select (select wert from k1 where id = 5 and year(datum)=2007 and
month(datum)=1) +
sum(case when reinraus='in' then wert else -wert end) from G1 where
year(datum)=2007 and month(datum)=1 and b_id=6;

das sum() Statement ergibt NULL.
Der andere Ausdruck ergibt 10.
Leider ergibt die Summe auch NULL.
Wieso? Wie kann ich das verhindern?

Danke
Kay

Re: select sum() Frage

am 28.01.2007 21:58:22 von Christian Kirsch

Kay Schulz schrieb:
> Hi
> ich habe folgendes select statement:
>
> select (select wert from k1 where id = 5 and year(datum)=2007 and
> month(datum)=1) +
> sum(case when reinraus='in' then wert else -wert end) from G1 where
> year(datum)=2007 and month(datum)=1 and b_id=6;
>
> das sum() Statement ergibt NULL.
> Der andere Ausdruck ergibt 10.
> Leider ergibt die Summe auch NULL.
> Wieso?

Weil NULL soviel wie "weiß nicht" heißt. Und "weiß nicht" plus irgendwas
bleibt eben weiterhin "weiß nicht". Du möchtest möglicherweise ein
SQL-Buch zu dem Thema zu Rate ziehen.

> Wie kann ich das verhindern?

Gar nicht - mit NULL kann man nicht rechnen.

Re: select sum() Frage

am 28.01.2007 22:35:52 von dnoeth

Christian Kirsch wrote:

>> das sum() Statement ergibt NULL.
>> Der andere Ausdruck ergibt 10.
>> Leider ergibt die Summe auch NULL.
>> Wieso?
>
> Weil NULL soviel wie "weiß nicht" heißt. Und "weiß nicht" plus irgendwas
> bleibt eben weiterhin "weiß nicht". Du möchtest möglicherweise ein
> SQL-Buch zu dem Thema zu Rate ziehen.
>
>> Wie kann ich das verhindern?
>
> Gar nicht - mit NULL kann man nicht rechnen.

Es sei denn, man wandelt NULL in 0 um mit einem einfachen
COALESCE(sum(...), 0)

Dieter

Re: select sum() Frage

am 29.01.2007 08:49:30 von Christian Kirsch

Dieter Noeth schrieb:
> Christian Kirsch wrote:

>> Gar nicht - mit NULL kann man nicht rechnen.
>
> Es sei denn, man wandelt NULL in 0 um mit einem einfachen
> COALESCE(sum(...), 0)

Das ergibt keinen Sinn. NULL ist eben nicht 0, sondern steht für "keine
Ahnung". Du könntest es mit der gleichen Berechtigung in 4711 oder -3
wandeln.

Re: select sum() Frage

am 29.01.2007 09:07:44 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: select sum() Frage

am 29.01.2007 10:07:30 von dnoeth

Christian Kirsch wrote:

>>> Gar nicht - mit NULL kann man nicht rechnen.
>> Es sei denn, man wandelt NULL in 0 um mit einem einfachen
>> COALESCE(sum(...), 0)
>
> Das ergibt keinen Sinn. NULL ist eben nicht 0, sondern steht für "keine
> Ahnung". Du könntest es mit der gleichen Berechtigung in 4711 oder -3
> wandeln.

Was der OP statt NULL möchte, weiss nur er. Die Wahrscheinlichkeit, dass
es 0 sein soll, war nur ziemlich hoch.

COALESCE(sum(...), 4711)

:-)

Dieter

Re: select sum() Frage

am 29.01.2007 10:32:57 von Daniel Fischer

Christian Kirsch!

> Das ergibt keinen Sinn. NULL ist eben nicht 0, sondern steht für "keine
> Ahnung". Du könntest es mit der gleichen Berechtigung in 4711 oder -3
> wandeln.

Das ist nicht ganz zuende gedacht, NULL in 0 zu wandeln hat bei einer
Summe ja den selben Effekt wie NULL-Einträge einfach zu ignorieren (also
"Summe aller bekannten Einträge") und ist daher deutlich weniger falsch
als 4711 oder -3.


Gruß
Daniel

Re: select sum() Frage

am 29.01.2007 10:45:49 von Christian Kirsch

Am 29.01.2007 10:32 schrieb Daniel Fischer:
> Christian Kirsch!
>
>> Das ergibt keinen Sinn. NULL ist eben nicht 0, sondern steht für "keine
>> Ahnung". Du könntest es mit der gleichen Berechtigung in 4711 oder -3
>> wandeln.
>
> Das ist nicht ganz zuende gedacht, NULL in 0 zu wandeln hat bei einer
> Summe ja den selben Effekt wie NULL-Einträge einfach zu ignorieren (also
> "Summe aller bekannten Einträge") und ist daher deutlich weniger falsch
> als 4711 oder -3.
>

Überzeugt

Re: select sum() Frage

am 29.01.2007 11:01:52 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: select sum() Frage

am 29.01.2007 12:18:28 von Daniel Fischer

Andreas Kretschmer!

> test=*# select avg(coalesce(i,0)) from s;

Ich weiss schon, warum ich "bei einer Summe" geschrieben habe... :-)


Daniel

Re: select sum() Frage

am 30.01.2007 17:35:32 von Kay Schulz

Dieter Noeth schrieb:
> Christian Kirsch wrote:
>
>>>> Gar nicht - mit NULL kann man nicht rechnen.
>>> Es sei denn, man wandelt NULL in 0 um mit einem einfachen
>>> COALESCE(sum(...), 0)
>>
>> Das ergibt keinen Sinn. NULL ist eben nicht 0, sondern steht für "keine
>> Ahnung". Du könntest es mit der gleichen Berechtigung in 4711 oder -3
>> wandeln.
>
> Was der OP statt NULL möchte, weiss nur er. Die Wahrscheinlichkeit, dass
> es 0 sein soll, war nur ziemlich hoch.
>
> COALESCE(sum(...), 4711)
>
> :-)
>
> Dieter
ich wollte was addieren. Und wenn es nichts zu addieren gibt,
dann ist das Ergebnis meines Wissens nach 0
Daher stimmt die Annahme
Kay