# Mittelwert über mehrere Zeilen



## Oli (29. Sep 2008)

Hallo,

ich habe eine folgende Abfrage:

SELECT * FROM table WHERE test = 10;

Das liefert natürlich eine bestimmte Anzahl von Datensätzen. Ich möchte nun erreichen, dass ich nur eine Zeile erhalte und zwar mit den Mittelwerten der einzelnen Spalten.

test test1 test2 
10    5      1
10    7      3
10    8      4 

Das Ergebnis soll sein:

test test1 test2
10   6,67  2,67


Wie kann man das in SQL realisieren??

Danke, 

Oli


----------



## SlaterB (29. Sep 2008)

SELECT avg(test) FROM table WHERE test = 10;


----------



## musiKk (29. Sep 2008)

SlaterB hat gesagt.:
			
		

> SELECT avg(test) FROM table WHERE test = 10;


Sehr sinnvoll. 
(ja, war nur ein Beispiel, schon klar)


----------



## SlaterB (29. Sep 2008)

da du in der Ausgabe auch die 10 haben willst, wäre es anders auch gar nicht so leicht zu erreichen,
min() max() usw gehen natürlich auch, 
aber du machst ja den Anschein, Standard-SQL-Funktionen weder zu kennen noch nachschlagen zu wollen  :bae:

(edit: dachte die Antwort käme von Oli)


----------



## musiKk (29. Sep 2008)

Man könnte noch mit GROUP BY nach Spalte test gruppieren und avg auf test1/2 anwenden.


----------



## Oli (29. Sep 2008)

Jaja,

Also ich kenne sowohl die min, die max und auch die avg funktion.

Ich möchte aber den Mittelwert aller Spalten bekommen.

tatsächlich sind das ca. 35.
Ich will mir halt SELECT avg(test1), avg(test2) from ... sparen und möchte nur wissen, wie es sonst lösbar ist, select avg(*)... wird ja nicht funktionieren.


----------



## musiKk (29. Sep 2008)

Nein, geht nicht. Die Analogie zu count(*) funktioniert nicht, das ist eine eigene Funktion. Zumindest wird es in den SQL-Referenzen separat aufgeführt.


----------



## SlaterB (29. Sep 2008)

> möchte nur wissen, wie es sonst lösbar ist

immer wieder schön, die normale Standardantwort, die man schon kennt, nicht im ersten Posting zu erwähnen,
die obligatorische Antwort darauf zu erhalten,
und dann zu schreiben dass man das kennt und was anderes will

so kommt man voran..


----------



## Oli (29. Sep 2008)

Also bleibt mir nichts anderes übrig als jede Spalte explizit hinzuschreiben und die Funktion avg(spalte) drüber laufen zu lassen...


----------



## Oli (29. Sep 2008)

@Slater

Wenn die Frage richtig gelesen würde, würde Deine Antwort auch anders ausfallen....


----------



## musiKk (29. Sep 2008)

Oli hat gesagt.:
			
		

> Also bleibt mir nichts anderes übrig als jede Spalte explizit hinzuschreiben und die Funktion avg(spalte) drüber laufen zu lassen...


Bin bei weitem kein SQL-Experte, aber ich wüsste in der Tat nicht, wie man das anders machen könnte. (Abgesehen von ganz abstrusen Geschichten wie Auslesen der Metadaten und dynamischem Zusammenbauen des SQL-Strings...)


----------



## Oli (29. Sep 2008)

Ja, das werde ich dann vermutlich auch machen, das muss ich dann eben über den Code lösen, denn ich möchte ja einigermaßen dynamisch bleiben und wenn in der Tabelle eine neue Spalte hinzukommt, dann muß ich die Prozedur per Hand ändern und das steht nicht zur Debatte.

Ich werde mir halt mit * alles holen und dann mit einer for - Schleife (bäh) die Mittelwerte ausrechnen...


----------

