*jiriki*: Mitteln über mehrere Spalten bei SELECT-Anfrage

Beitrag lesen

Ganz großer Dank für die ausführliche Erklärung. Und ja, istn Amiprovider, der sich auf seiner alten Page noch den größten Provider der Welt gerühmt hat: ait.com .

Grüßle, *jiriki*

Hallo,

Ich hab hier eine MySQL-3.23.33-Version aufm Server

oh je.

und möchte nun in meiner Tabelle eine Select-Anfrage starten, die mir unter anderem einen über drei Spalteneinträge (Resultat1, Resultat2 und Resultat3) gemittelten Wert liefern soll, wobei jedoch auch eine oder zwei Resultat-Attribute NULL sein können, und dann nicht zur Mittelung herbeigezogen werden sollen.

Z.B.: Resultat1 = 10.2, Resultat2 = 4.8, Resultat3 = NULL bzw. 0.0

Wirklich bzw. 0.0. Dann vergiß meine Lösung, die ich Dir vorstelle. Die geht nur bei echten NULL-Werten.

Richtig: ( Resultat1 + Resultat2 ) : 2 = 7.5
Falsch: ( Resultat1 + Resultat2 + Resultat3 ) : 3 = 5.0

Hat jemand eine Idee, wie die entsprechende Anfrage á la:

SELECT 1 + NULL -> liefert NULL zurück.
Um die Summe richtig zu berechnen, nutze COALESCE():
(added in MySQL 3.23.3)

SELECT COALESCE(spalte1, 0) + COALESCE(spalte2, 0) + COALESCE(spalte3, 0)
liefert Dir die korrekte Summe.

Nun musst Du noch die Anzahl der Summanden bestimmen, dazu kannst Du die ISNULL()-Funktion benutzen:

SELECT (1 - ISNULL(spalte1)) + (1 - ISNULL(spalte2)) + (1 - ISNULL(spalte2))
liefert Dir die Anzahl der von NULL verschiedenen Spalten zurück. Du kannst dies umschreiben in

SELECT <Anzahl der Spalten> - ISNULL(spalte1) - ISNULL(spalte2) - ...

Die Division der beiden Werte solltest Du selbst hinbekommen und nicht vergessen daran zu denken, welchen Wert Du zurückliefern willst, wenn _alle_ Spalten NULL enthalten.

Wenn Du den Wert 0 wie NULL behandeln willst, dann könntest Du dafür IF benutzen.

Freundliche Grüße

Vinzenz