PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL (PostgreSQL): NULL-Wert bei sum () ersetzen



drunken monkey
10.05.2006, 14:42
Kann mir mal jemand bei meinen Hausaufgaben helfen? ^^' Ich habe schon einige Zeit gesucht, aber es weder in den Vorlesungsunterlagen, noch im Internet gefunden:

Wie kann man für eine sum ()-Funktion einen "Standardwert" bestimmen, der dortsteht falls die Summe NULL ist? Sollte eigentlich ganz leicht sein, aber wie gesagt: nichts gefunden. -_- Müsste übrigens auf Postgres laufen, falls das einen Unterschied macht.

Hier noch die Query, falls die gebraucht wird (weswegen auch immer o_O):

SELECT Vorname, Zuname, GeburtsDatum,
COUNT (DISTINCT (IDA)) AS Aufnahmen,
COUNT (DISTINCT (Instrument)) AS Instrumente,
SUM (Verdienst)
FROM Person p NATURAL JOIN Musiker LEFT OUTER JOIN spielt ON (ID = IDM)
GROUP BY ID, Vorname, Zuname, GeburtsDatum;
Vielen Dank im Voraus, weiß hier doch sicher jemand! ^_^

Gary
10.05.2006, 15:59
Ich weiß jetzt nicht ganz genau, was du als Standartwert verstehst, aber mittels der NVL+AVG Funktion kann man einen Standartwert mit dazurechnen... In dem Fall die "0".


SELECT Vorname, Zuname, GeburtsDatum,
COUNT (DISTINCT (IDA)) AS Aufnahmen,
COUNT (DISTINCT (Instrument)) AS Instrumente,
AVG(NVL(Verdienst,0))
--oder
SUM(NVL(Verdienst,0))
FROM Person p NATURAL JOIN Musiker LEFT OUTER JOIN spielt ON (ID = IDM)
GROUP BY ID, Vorname, Zuname, GeburtsDatum;

Hilft dir das ^_^


Edit:

SELECT
...
CASE WHEN Verdienst = 0
THEN "Wert"
ELSE
Verdienst
END
...
FROM ...
;

Wäre dann eine einfache Überprüfung, was drin steht...

drunken monkey
10.05.2006, 16:10
Hilft dir das ^_^
Nein, aber danke für den Versuch! ;) Genau die Funktion scheint's bei Postgres nicht zu geben! o_O Hab's jetzt aber doch durch lineares Durchstöbern der Postgres-Dokumentation geschafft, eine passende Funktion zu finden: COALESCE (values [, ...]) liefert den ersten Parameter zurück, der nicht NULL ist. Mein Code ist jetzt also:

SELECT Vorname, Zuname, GeburtsDatum,
COUNT (DISTINCT (IDA)) AS Aufnahmen,
COUNT (DISTINCT (Instrument)) AS Instrumente,
COALESCE (SUM (Verdienst), 0) AS Gesamtverdienst
FROM Person p NATURAL JOIN Musiker LEFT OUTER JOIN spielt ON (ID = IDM)
GROUP BY ID, Vorname, Zuname, GeburtsDatum;
Nur falls es jemand nochmal braucht! ;)

Gary
10.05.2006, 16:15
Na, das hätte ich dir als nächstes gesagt - wusste aber nicht genau, ob du mehr als 2 Argumente hast >_> ...aber gut ;)