2017-12-29 5 views
1

Wenn wir zwei Tabellen mit eins zu viele Beziehung haben, wie wir die Summe der linken Tabellenspalte erhalten können.My-SQL eins zu viele Relation Join Get Summe der linken Tabellenspalte

Ex: 
Player (player_id,name) 
Stats (player_id, game_id, score) 

Player 
1 Aaron Brooks 
2 Beno Udrih 
3 James harden 

Stats 
player_id score year 
1   5  2017 
1   3  2017 
2   4  2016 

The result I need to get is (Player scores in 2017) 
Player   Score 
Aaron Brooks 8 
Beno Udrih  0 
James harden 0 

Ein Spieler hat viele Statistikaufzeichnungen.
Dann wie bekomme ich alle Spieler Liste mit seiner Summe der Gesamtpunktzahl. (Auch wenn Statistiken nicht verfügbar für einen Spieler seine Punktzahl müssen 0 sein)

bekam die richtige Abfrage

select p.player_id,p.name,coalesce(sum(s.score),0) 
from player p 
left join stats s on p.player_id = s.player_id and s.year=2017 
group by p.player_id,p.name 

Antwort

0

Bewerben einfache Aggregation und kommen Sie verwenden links auf der Statistiktabelle alle Datensätze zu erhalten von Spieler-Tabelle, ob sie Aufzeichnungen zugeordnet ist, in der Statistiktabelle oder nicht

select p.player_id,p.name,coalesce(sum(s.score),0) 
from player p 
left join stats s on p.player_id = s.player_id 
group by p.player_id,p.name 

Demo

Edit für Filter

Ihre Filter für Statistiktabelle von where Klausel on Klausel

select p.player_id,p.name,coalesce(sum(s.score),0) 
from player p 
left join stats s on p.player_id = s.player_id and s.year=2017 
group by p.player_id,p.name 

Anwenden von Filter auf der linken Tabelle verschieben where-Klausel wird von links konvertieren beitreten zu inneren

Demo beitreten

+0

Danke @khalid, Aber wenn ich es mit Jahr filtere, funktioniert es nicht korrekt. Hast du eine Ahnung warum? wählen p.player_id, p.name, verschmelzen (sum (s.score), 0) von Spieler S. links Statistiken s auf p.player_id beitreten = s.player_id WHERE s.year = 2017 Gruppe von p .player_id, p.name – Chythi

+0

@Chythi Aktualisieren Sie Ihre Frage, wie Sie Filter anwenden? Ich schlage vor, dass Sie den Filter nach 'on' like' und s.year = '2017'' –

+1

@Khalid hinzufügen, es funktioniert. Danke, große Hilfe! – Chythi

Verwandte Themen