Spalten subtrahieren (davon eine NULL)

Hallo Gemeinde,

ich beschäftige mich zur Zeit wieder mal aktiver mit SQL. Dabei bin ich auf folgendes Problem gestoßen, das sicherlich nicht postgres-spezifisch ist.

Ich habe 2 Spalten, Spalte Menge und Spalte Abgang. Jetzt möchte ich diese zu einer 3. Spalte Vorrat zusammenfassen. Dafür rechne ich innerhalb der Query Menge-Abgang. Funktioniert auch.

Dabei kann es jedoch passieren, dass kein Wert in der Spalte Abgang existiert und der Wert somit NULL ist. Es wird also Menge x - NULL gerechnet. Ist dies der Fall, wird in Spalte 3 - Vorrat - nicht wenigstens die Menge geschrieben, sondern sie bleibt ebenfalls NULL. Ich hätte da aber gern die Menge stehen.

Das gleiche Problem habe ich bei der Aggregatfunktion SUM. Gibt es nichts zu summieren, wird NULL gesetzt und nicht 0.
Ist irgendwo ja logisch, aber kann ich das irgendwie beeinflussen ohne einen Umweg über eine PHP-Funktion zu gehen?

Danke im voraus!

SELECT COALESCE(feld1, 0) - COALESCE(feld2, 0) …

ist auch nicht postgresspezifisch …

PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Conditional Expressions

9.16.2. COALESCE
COALESCE(value [, …])

The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null. It is often used to substitute a default value for null values when data is retrieved for display, for example:
SELECT COALESCE(description, short_description, ‘(none)’) …


Like a CASE expression, COALESCE only evaluates the arguments that are needed to determine the result; that is, arguments to the right of the first non-null argument are not evaluated. This SQL-standard function provides capabilities similar to NVL and IFNULL, which are used in some other database systems.

Klappt. Spitzenmäßig, danke dir :slight_smile: