2016-04-01 8 views
0

Ich habe ein Problem. (SQL Begginer). Ich habe zwei Tische.MySQL Wählen SUM JOIN WHERE zusammen nicht funktioniert

Spieler (nr, player_id, team_id, Name, Punkte, Saison)

Teams (team_id, TEAM_NAME, Saison) - Ther ist ein einzigartiges team_id aber die TEAM_NAME kann nach verschiedenen Saison unterschiedlich sein.

Ich möchte alle Punkte der einzelnen player_id in bestimmten Jahreszeit summieren, und das kann ich :)

SELECT SUM(players.points), 
      players.player_id, 
      players.team_id, 
      players.season, 
      players.nr, 
      players.name 
     FROM players 
    WHERE season='2015/2016' 
    GROUP BY player_id 
    ORDER BY SUM(players.points) DESC 
    LIMIT 30 

und diese Arbeit perfekt für mich :) Aber, ich kann es nicht verstehen, wie man JOIN Teams Tabelle zu bekommen teams.team_name entsprechend der spezifischen Saison entspricht der WHERE Clousure. In diesem Fall Saison = '2015/2016' Specyfic. Wenn ich die Punkte der Spieler von 2015/2016 zusammenfassen will, muss ich auch Teamname von Seesson 2015/2016 bekommen. Ich habe LEFT JOIN versucht, aber ohne Erfolg:/ Hier ist mein Code.

SELECT players.player_id, 
      players.nr, 
      players.name, 
      players.team_id, 
      SUM(players.points), 
      players.season 
     FROM players 
    WHERE players.sezon='2015/2016' 
LEFT JOIN teams 
     ON (teams.team_id=players.team_id AND teams.season=players.season) 
    GROUP BY player_id 
    ORDER BY SUM(points) DESC 
    LIMIT 30 

Vielen Dank für Ihre Mühe.

+0

passende Team JOIN gehe ich davon aus 'players.season' vs' players.sezon' nur copy/paste ist Fehler hier? – Sean

+0

Ja. Englische Wörter in meinem Beispiel verwenden. teams.season = players.season –

+0

Wenn Sie möchten, sollten Sie diese einfache zweistufige Vorgehensweise befolgen: 1. Wenn Sie dies noch nicht getan haben, stellen Sie geeignete DDLs (und/oder ein sqlfiddle) bereit, damit wir einfacher replizieren können das Problem. 2. Wenn Sie dies noch nicht getan haben, geben Sie ein gewünschtes Ergebnisset ein, das den Informationen in Schritt 1 entspricht. – Strawberry

Antwort

0

Wenn Sie nicht wollen, ohne Spieler Datensätze anzuzeigen Rekord INNER statt LEFT JOIN

SELECT players.player_id, 
     players.nr, 
     players.name, 
     players.team_id, 
     SUM(players.points), 
     players.season, 
     teams.team_name 
FROM players 
LEFT JOIN teams 
    ON (teams.team_id = players.team_id AND teams.season = players.season) 
WHERE players.season = '2015/2016' 
GROUP BY player_id 
ORDER BY SUM(points) DESC 
LIMIT 30 
+0

Ich möchte die Player-Datensätze anzeigen, aber Player-Zeilen heben die Werte für team_name nicht auf. Ich möchte alle Spielerstatistiken von Spielern Tabelle und Team_Names von Teams Tabelle, wo Team_ID und Saison die gleichen in beiden Tabellen sind. –

+0

Das ist der Grund, warum Sie team_name aus der Tabelle thread kommen lassen wollen (teams.team_name), aber wie gesagt, wenn die Datensätze mit team_name = null nicht angezeigt werden sollen, verwenden Sie INNER JOIN, um sicher zu sein, dass der Spieler dem bestehenden Team zugewiesen ist –