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