Durchschnitt einer Zeile berechnen

Hallo Zusammen,

leider habe ich mein Projekt etwas aus den Augen verloren. Ich wusste schon gar nicht mehr das ich vor zwei Jahren die Frage hier schon einmal gestellt habe. :)

Das Problem ist nach wie vor das gleiche. Es geht um eine Datenbank in der Produkte bewertet werden. Die Produkte werden von verschiedenen Usern bewertet. Jedoch ist es nicht sicher das jeder User jedes Produkt bewertet. Somit gibt es Zellen die mit NULL gefüllt sind. Die Skala geht von 0 bis 10 Punkten.

IST Zustand Tabelle:

Nr Produkt Bewertung_1 Bewertung_2 Bewertung_3
1 Pfannenkuchen 2 9 3
2 Marmorkuchen NULL 2 9

Mit einem SELECT Befehl würde ich nun gerne den Durchschnitt der Bewertungen eines Produktes errechnen und folgendes Ergebnis erhalten.

Pfannenkuchen 2 + 9 + 3 / 3 = 4,7
Marmorkuchen 2 + 9 / 2 = 5,5

Mit meinem bisherigen SELECT Befehl wurde immer durch 3 geteilt, was auch funktioniert solange alle User das Produkt bewertet haben.
Die Herausforderung ist immer durch die Anzahl zu teilen wie oft ein Produkt bewertet wurde.

SELECT (Bewertung_1 + Bewertung_2+ Bewertung_3) / 3 FROM tabelle GROUP Nr;

Ich hoffe ich habe das Problem verständlich beschrieben.

Hat hier jemand einen Tipp für mich.

Vielen Dank im Vorraus.
Gruß master100
 
Werbung:
Nun denn:

Code:
test=*# select * from master100 ;
 nr |  name  | b1 | b2 | b3
----+--------------+----+----+----
  1 | Pfannkuchen  |  2 |  9 |  3
  2 | Marmorkuchen |  |  2 |  9
(2 rows)

test=*# select *, ((coalesce(b1,0)+coalesce(b2,0)+coalesce(b3,0)) / (case when b1 is not null then 1 else 0 end + case when b2 is not null then 1 else 0 end + case when b3 is not null then 1 else 0 end)::numeric)::numeric(6,3) as result from master100 ;
 nr |  name  | b1 | b2 | b3 | result
----+--------------+----+----+----+--------
  1 | Pfannkuchen  |  2 |  9 |  3 |  4.667
  2 | Marmorkuchen |  |  2 |  9 |  5.500
(2 rows)

Und nun: Kaffee!
 
Vielen Dank für deine schnelle Antwort.
Leider hat bei mir der Syntax nicht richtig funktioniert.

Ich erhalte folgende Fehlermeldung:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'numeric) numeric(6,3) as result from master100' at line 5

Zusätzlich ist mir soeben aufgefallen, das ich den Beitrag in der falschen Kategorie eingestellt habe. Ich habe einen MySQL Server und keinen MSSQL Server.

Gruß
master100
 
Werbung:
Das ::numeric das ist nur ein Cast, weil die originalen Datentypen INT waren, Du aber die genauen Werte mit Nachkommastellen haben willst. Das anzupassen eine Deines Was-auch-immer DB überlasse ich Dir zur Übung.
 
Zurück
Oben