MySQL Durchschnittswert ohne Null
Jörg Wagner
- datenbank
0 hotti0 Frank (no reg)
Hallo,
ich habe ein kleines Kommentarskript für Fotos; dort kann man u.a. eine Bewertung abgeben von 1-5, oder keine, in diesem Fall ist der Wert in der Tabelle "0".
Auf der Seite möchte ich die durchschnittliche Bewertung darstellen, und verwende dafür folgendes Statement zur Abfrage:
$bewertungsabfrage = "SELECT AVG(bewertung) AS durchschnitt FROM kommentare WHERE id = '$foto' AND bewertung > 0";
"bewertung" ist die Spalte, die 0-5 enthält. Damit "Nichtbewertungen" nicht in den Wert einfließen, soll die Abfrage nur die Zeilen erfassen, in denen der Eintrag "bewertung" nicht 0 ist, im Query hier ganz hinten.
Leider klappt das nicht so wie gedacht, die Nuller werden eingerechnet und verfälschen den "richtigen" Wert.
Ich hab schon versucht, die Lösung via Google zu finden, allerdings habe ich nur englische Einträge gefunden und das kann ich leider nicht -.-
Ist die Abfrage falsch, oder wo liegt das Problem?
Grüße
hi,
Leider klappt das nicht so wie gedacht, die Nuller werden eingerechnet und verfälschen den "richtigen" Wert.
Sicher?
mysql> select avg(x) from test where x > 0;
+--------+
| avg(x) |
+--------+
| 2.0000 |
+--------+
1 row in set (0.00 sec)
mysql> select x from test;
+---+
| x |
+---+
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 2 |
| 3 |
+---+
13 rows in set (0.02 sec)
bei mir nicht,
Hotti
Hallo,
ich hab es grad selbst probeiert.
SELECT AVG(bewertung) AS durchschnitt FROM kommentare WHERE id = '$foto' AND bewertung > 0
tut genau
WHERE geschieht vor SELECT
BTW ... NULL oder 0?
Abfrage ist syntaktisch und sermantisch richtig. Dein Problem liegt woanders oder du hast nicht die ganze Wahrheit erzaehlt.
Fuehre mal nur folgendes aus
SELECT bewertung AS durchschnitt FROM kommentare WHERE id = '$foto' AND bewertung > 0
dann kopier die Werte in Excel oder sonstwohin und berechne den Durschnitt von Hand und vergleiche ihn mit mit dem Wert von
SELECT AVG(bewertung) AS durchschnitt FROM kommentare WHERE id = '$foto' AND bewertung > 0
BTW2: Statt 0 fuer "keine Bewertung" solltest du erwaegen NULL zu speichern statt eines diskreten Wertes, der Ergebnisse von mathematischen Aggregatfunktionen verfaelschen koennte.
Kein Englisch? Nich mal ansatzweise? In diesen Zeiten? Okay.
Aber hat Google seinen Uebersetzungdienst eingestellt? Zu jedem fremdsprachigen Suchmaschinenergebnis zeigt Google doch immer einen Link "Diese Seite uebersetzen" oder so?
Bitte mehr bemuehen beim Recherchieren und keine Ausreden suchen.
Ciao, Frank