GELight: SQL Befehl

Hallo alle zusammen,

Ich sitze an einem kleinen Problem fest und bäuchte mal einen Tip.

tab_Teilnehmer: id, Mitgliedsnummer
tab_Teilnahmen: Teilnehmer, Punkte
tab_punkte: id, Punkte

mein Befehl sieht derzeit wie folg aus:

SELECT  u.Mitgliedsnummer AS UsrNr,
        p.Punkte AS Punkte
FROM    dbcup_Teilnehmer u
        LEFT JOIN dbcup_Teilnahmen t ON (u.id = t.Teilnehmer)
        LEFT JOIN dbcup_punkte p ON (p.id = t.Punkte)
ORDER BY UsrNr ASC

...dieser funktioniert soweit wunderbar und er gibt mir alle Teilnahmen(Mitgliedsnummern) aus + dessen Punkte, die er gemacht hat.
Jetzt möchte ich gern alle Mitgliedsnummern zusammenfügen und deren Punkte zusammenrechnen.

Meine Idee war diese hier: Bringt allerdings einen Fehler.

SELECT  u.Mitgliedsnummer AS UsrNr,
        COUNT(p.Punkte) AS Punkte
FROM    dbcup_Teilnehmer u
        LEFT JOIN dbcup_Teilnahmen t ON (u.id = t.Teilnehmer)
        LEFT JOIN dbcup_punkte p ON (p.id = t.Punkte)
ORDER BY UsrNr ASC

Wie muss ich das Count oder Sum anwenden um die Punkte für jeden User zusammenzurechnen?

also statt:
1000 - 50
1000 - 20
1100 - 10
1100 - 12

soll:
1000 - 70
1100 - 22

...zurückgegeben werden.

Mario...

  1. Hallo,

    Jetzt möchte ich gern alle Mitgliedsnummern zusammenfügen und deren Punkte zusammenrechnen.

    Du willst also die Daten nach einem betsimmten Kriterium (Mitgliedsnummer) gruppieren, und dabei einige oder auhc nur eine der möglichen Aggregatfunktionen verwenden.

    Grüße
      Klaus

  2. yo,

    Meine Idee war diese hier: Bringt allerdings einen Fehler.

    dies schließt dann schon mal die verwendung einer aktuelleren mysql version als dbms aus. ;-)

    SELECT  u.Mitgliedsnummer AS UsrNr,
            COUNT(p.Punkte) AS Punkte
    FROM    dbcup_Teilnehmer u
            LEFT JOIN dbcup_Teilnahmen t ON (u.id = t.Teilnehmer)
            LEFT JOIN dbcup_punkte p ON (p.id = t.Punkte)
    ORDER BY UsrNr ASC

    Wie muss ich das Count oder Sum anwenden um die Punkte für jeden User zusammenzurechnen?

    deine abfrage ist fast komplett und wie klaus schon sagte...

    SELECT  u.Mitgliedsnummer AS UsrNr,
            COUNT(p.Punkte) AS Punkte
    FROM    dbcup_Teilnehmer u
            LEFT JOIN dbcup_Teilnahmen t ON (u.id = t.Teilnehmer)
            LEFT JOIN dbcup_punkte p ON (p.id = t.Punkte)
    GROUP BY UsrNr
    ORDER BY UsrNr ASC

    Ilja

    1. Hallo Ilja,

      da ist Dir doch glatt etwas durch die Lappen gegangen:

      deine abfrage ist fast komplett und wie klaus schon sagte...

        
      
      > SELECT  u.Mitgliedsnummer AS UsrNr,  
      
                /* Bitte ersetze in der folgende Zeile  
                  COUNT(p.Punkte) AS Punkte  
                  durch die geeignete Aggregatsfunktion SUM()  
                  Die Punkte sollen wohl summiert werden :-) */  
                SUM(p.Punkte) AS Punkte  
      
      > FROM    dbcup_Teilnehmer u  
      >         LEFT JOIN dbcup_Teilnahmen t ON (u.id = t.Teilnehmer)  
      >         LEFT JOIN dbcup_punkte p ON (p.id = t.Punkte)  
      > GROUP BY UsrNr  
      > ORDER BY UsrNr ASC
      
      

      Freundliche Grüße

      Vinzenz