Avg() nur felder mit Inhalt

lszts

Grünschnabel
Moin allerseits,

ich möchte bei mehreren Spalten aus meiner Tabelle den Durchschnittswert ermitteln(für jede Spalte einzeln), allerdings sollen nur felder in die Bewertung die eine Zahl enthalten. Also es können nur Zahlen in den Feldern stehen oder garnichts.
Vielleicht gibts eine Erweiterung zu avg() oder eine andere logische Abfrage, ich weiss es nicht.

Gruss
lszts
 
Hi und willkommen im Forum

Ich versteh dich nicht ganz. Die Anwendung der Funktion macht doch auch nur auf Spalten vom Typ Integer, Decimal, usw. Sinn.
Kannst du also bitte etwas genauer schreiben, wo dein Problem liegt! Ggf wäre auch das DBMS nicht ganz uninteressant
 
Hallo,
...es können nur Zahlen in den Feldern stehen oder garnichts. ...
Dann sind das also NULL-Werte ?

select sum(spalte) / count(spalte) where spalte is not null

(Nur mal roh gedacht und nicht getstestet ) ;-)

Hallo Niggo,
AVG() ermittelt den Wert aus allen Zeilen und liefert somit einen falschen Mittelwert.
Summe (alle Zahlen) = 100, insgesamt 100 Zeilen AVG() = 1
aber nur 50 Zahlnewerte (Zeilen) AVG() = 2
deshalb die Frage von Iszts.

mfg
 
AVG() ermittelt den Wert aus allen Zeilen und liefert somit einen falschen Mittelwert.
Summe (alle Zahlen) = 100, insgesamt 100 Zeilen AVG() = 1
aber nur 50 Zahlnewerte (Zeilen) AVG() = 2
deshalb die Frage von Iszts.
mfg

Ich kenne mySQL nicht so gut, aber trotzdem halte ich diese Aussage für höchst zweifelhaft. NULL heißt eben nicht "hier steht nichts drin", sondern "ich weiß nicht, was hier drin stehen soll". Mit anderen Worten: Aggregatsfunktionen (wie z.B. AVG()) sollten sich um solche Werte überhaupt nicht kümmern, denn er ist per Definition nicht berechenbar. Deshalb ist ein zusätzliches Ausschließen von NULL-Werten überflüssig.
 
@mschuetzda
Ich hatte das ein bisschen falsch verstanden. Der Satz davor klang eher so, als ob er versucht, die Funktion auf eine (var)char Spalte anzuwenden.
 
Hallo Niggo,
... Ich hatte das ein bisschen falsch verstanden...
kein Problem passiert mir manchmal auch ;-)

Hallo ishino,
ja doch, ich bin sicher, dass du recht hast und ich hatte etwas schief gedacht.

Hallo lszts,
es waere schoen, wenn Du noch mal was dazu beitragen koenntest, z.B. welches DBMS Du
einsetzt und ob AVG() bei deinem Problem falsche Werte geliefert hat.

mfg und ein schoenes Wochenende
 
Moin,

also danke für die tolle Unterstützung. Ich benutze MySQL und Perl.

Den Ansatz hatte ich auch aber:

select sum(spalte) / count(spalte) where spalte is not null

(Nur mal roh gedacht und nicht getstestet )

was mach ich wenn ich 20 Spalten hab.... kann ich 20 where spalte is not null nehmen, und komm ich dann zum gewünschten Ergebnis.

Danke

Lszts
 
Hallo,

wenn Du mein letztes Posting gelesen hast und vor allem das von ishino geht es ganz einfach mit:

SELECT AVG(spalte1) AS AVG_SP1, AVG(spalte2) AS AVG_SP2, ... ... AVG(spalte20) AS AVG_SP20

mfg
 
Hi mschuetzda,

so nimmt er die leeren Felder auch mit und rechnet dadurch "falsch".
Oder meinst du es funktioniert wenn die spalten integer sind? Sind im moment glaub ich varchar.

Danke
 
Hi mschuetzda,

so nimmt er die leeren Felder auch mit und rechnet dadurch "falsch".
Oder meinst du es funktioniert wenn die spalten integer sind? Sind im moment glaub ich varchar.

Danke
 

Neue Beiträge

Zurück