MySQL Durchschnitt berechnen?
ListID | Titel | Inhalt
-----------------------
1 | ... | ...
2 | ... | ...
tabelle rate:
ListID | Rate | UserID
----------------------
1 | 2 | 14
1 | 4 | 17
1 | 1 | 9
1 | 5 | 3
2 | 3 | 9
2 | 2 | 15
Ich möchte den Durchschnitt von 'Rate' für jede Zeile von Tabelle 'Liste' berechnen.
Sodass die Ausgabe dann in etwa so aussieht:
ListItem 1:
- Titel: ...
- Inhalt: ...
- Rate: 3
ListItem 2:
- Titel: ...
- Inhalt: ...
- Rate: 2,5
Vielen Dank für jede Antwort :)
3 Antworten
Zum Berechnen des Durchschnittes gibt es bei SQL die Funktion AVG.
Aus Deinen Angaben lässt sich nichts sinnvolles entnehmen. ich verstehe nicht, was Du genau möchtest. Der Durchschnitt von rate ist nur ein Wert und ergibt im Ergebnis nur eine Zeile:
SELECT AVG(rate) FROM liste
Was ist mit Titel und Inhalt? Wo kommen die her? Sollen wir uns das aus dem Finger saugen?
Die Anweisung hier funktioniert jedenfalls und bringt den Durchschnitt aller rate in einer zeile.
Vielleicht reichtDir das, um den Rest selber weiter zu vervollständigen.
select listid, avg(rate) from rate
group by listid
Da selectest du dir dann noch den rest dazu
avg func...
eine zeile ist ja auch richtig... du hast ja nur einen durchschnitt...
Lass die Datenbank sein, was sie ist -- eine Bank für Daten, hole dir die Daten jeweils aus den Tabellen und brechne den Durchschnitt in JS oder PHP
Das ist kein guter Rat. Denn die Datenbank arbeitet wesentlich schneller und liefert dann nur die Daten, die man wirklich haben möchte. Wenn du die erst alle Daten aus der DB ziehst und dann anfängst das per PHP (oder JS) zu berechnen, zu filtern und zu sortieren ist das sehr ineffizient. Bei 1000 Abfragen mag das gehen. Aber je größer die DB wird, desto deutlicher werden auch die Vorteile gleich eine richtige Datenbank-Abfrage zu stellen. Außerdem wird der zu erstellende Code (PHP/JS) wesentlich schlanker / sauberer.
das hatte ich ja vorher so aber ich möchte etwas mehr performance
Ja, is gut -- nur wenn's nicht funktioniert, nützt alle Performance nix
habe ich schon versucht aber dann wird entwerder nichts oder nur eine Zeile ausgegeben und diese mit falschen Werten