List:German« Previous MessageNext Message »
From:RICHARD_STRACKE Date:August 13 2003 7:31pm
Subject:Antwort: Fragen zur GROUP BY Klausel
View as plain text  
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





Thread
Fragen zur GROUP BY Klausel(Rene)13 Aug
Antwort: Fragen zur GROUP BY KlauselRICHARD_STRACKE13 Aug
Antwort: Fragen zur GROUP BY KlauselRICHARD_STRACKE13 Aug