Mitteln über mehrere Attribute bei SELECT-Anfrage
*jiriki*
- datenbank
Hallo Leute,
Ich hab hier eine MySQL-3.23.33-Version aufm Server 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
Richtig: ( Resultat1 + Resultat2 ) : 2 = 7.5
Falsch: ( Resultat1 + Resultat2 + Resultat3 ) : 3 = 5.0
Hat jemand eine Idee, wie die entsprechende Anfrage á la:
SELECT farm, breeder, rider, horse, [...] as result FROM stallions;
aussehen könnte?
Vielen Dank! 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.0Hat 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
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.0Hat 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