Hallo
Also,
prinzipiell muss alles in die GROUP BY-Klausel, was keine Aggregatfunktion
ist - sonst gibt es eine Fehlermeldung. Das wäre bei Dir alles außer
AVG(uk.voting) und COUNT(uk.umbauten_id).
Ich muss gestehen, ich habe Deine Spalten nicht wirklich verstanden, aber
ich vermute, Du meinst eine der beiden folgenden Alternativen:
a)
um.umbauten_id und die anderen Kriterien beziehen sich jeweils auf die
gesamte Gruppe von Abstimmungsergebnissen, deren Anzahl und Mittelwert Du
mit ausgeben möchtest. Dann müsstest Du ein sinnvolles Ergebnis bekommen,
indem Du nach allen Kriterien gruppierst, ungefähr so:
Kategorie Farbe Anzahl Mittelwert
A rot 751 8,4
A gelb 348 6,7
B blau 634 7,2
usw. ("...group by Kategorie, Farbe")
b)
User_id und Username legen mir aber die Vermutung nahe, dass Du als
Ergebnis die Angaben einzelner "Abstimmer" ZUSAMMEN mit Mittelwert und
Anzahl der gesamten Abstimmung anzeigen möchtest, z. B. so:
User Kategorie Farbe Angabe Anzahl Mittelwert
1 A rot 9 751 8,4
2 A rot 10 751 8,4
3 A rot 6 751 8,4
usw.
Das geht mit Deiner Abfrage nicht. Du kannst Aggregatfunktionen in einer
Abfrage nur ENTWEDER für eine Gruppe ODER für die gesamte Tabelle/eine
größere Gruppe berechnen. Für die Alternative 2 solltest Du die Ergebnisse
der Aggregatfunktionen ERST in eine eigene Tabelle schreiben und sie DANN
mit den Angaben der einzelnen User kombinieren. Zum Beispiel so:
CREATE TABLE Aggregat
SELECT Kategorie, Farbe, COUNT(Angabe) AS Anzahl, AVG(Angabe) AS Mittelwert
FROM Tabelle_mit_Einzelangaben_der_abstimmenden_User
GROUP BY Kategorie, Farbe;
SELECT user, Kategorie, Farbe, Angabe, Anzahl, Mittelwert
FROM Tabelle_mit_Einzelangaben_der_abstimmenden_User INNER JOIN Aggregat
ON
Tabelle_mit_Einzelangaben_der_abstimmenden_User.Kategorie=Aggregat.Kategorie
AND Tabelle_mit_Einzelangaben_der_abstimmenden_User.Farbe=Aggregat.Farbe
Ich nehme an, dass es so funktionieren müsste (die doppelte ON-Bedingung
habe ich ausprobiert, die funktioniert; den Rest müsstest Du ausprobieren).
mit Gruß,
Richard Stracke
ReneEspenhahn@t-
online.de (Rene) An: <mysql-de@stripped>
Kopie: (Blindkopie: RICHARD
STRACKE/QVCDE)
13.08.2003 20:24 Thema: Fragen zur GROUP BY Klausel
Hi,
wo kann ich eine gute Erklärung zur group by Klausel von mysql finden.
Irgendwie ist das bei mir voll das Glücksspiel ich Agregatbefehle mixe.
Wenn ich z.B. folgende Query habe weiß ich nicht wie ich dort den Groupby
Befehl legen muß um ein korrektes Ergebnis zu bekommen.
$sql = 'SELECT um.*, u.username, o.ownerlist_id, AVG(uk.voting) AS voting,
COUNT(uk.umbauten_id) AS anzahl, m.name AS modellname
FROM '.UMBAUTEN_TABLE.' um
INNER JOIN '.USERS_TABLE.' u
ON (u.user_id = um.user_id)
LEFT JOIN '.OWNERLIST_TABLE.' o
ON (um.user_id = o.user_id)
LEFT JOIN '.UMBAUTEN_KOMENTAR_TABLE.' uk
ON (uk.umbauten_id = um.umbauten_id)
INNER JOIN '.MODELL_TABLE.' m
ON (m.modell_id = um.modell)
WHERE umbauten_id = '.$details.'
GROUP BY um.umbauten_id';
Dieses Statement soll mir einerseits natürlich die gewünschten
Attributdaten aus den Tabellen liefern aber zugleich auch einen Mittelwert
von Abstimmungsergebnissen parallel die Anzahl der Abstimmungen woraus der
Mittelwert berechnet wird.
um* = umbauten_id [ist primary_key], user_id, datum, umbauten, text,
top_bild, modell, farbe, komentare, votings, valided
Nach was soll ich nun gruppieren damit beide agregate ein richtiges
Ergebnis liefern?
danke
Rene