Ich habe Probleme, eine Zählung zu meiner Frage beizutreten. Ich habe eine Tabelle, in der Zielereignisse gespeichert sind. Jede der Spalten "scorer" "assist1" und "assist2" enthält die Spieler-IDs. Ich versuche herauszufinden, wie oft eine Spieler-ID im Torschützen erscheint, assist1 oder assist2, aber NUR, WENN DER TYP IST pp
goalEvents
gid scorer assist1 assist2 type
1 1 2 3 eve
1 1 2 NULL pp
1 1 2 3 sh
ABFRAGE
SELECT
p.playerid, p.playernum,
CONCAT_WS(". ", SUBSTR(p.playerfname, 1, 1), p.playerlname) name,
COALESCE(pp.powerplay, 0) PPP
FROM players p
LEFT JOIN (
SELECT COUNT(*) AS powerplay FROM goalEvents WHERE scorer = p.playerid OR assist1 = p.playerid OR assist2 = p.playerid AND type="pp"
) pp
WHERE p.playerteam = 1
Was ich als Endergebnis will
id name PPP
1 P. Name 1
2 A. Name 1
3 S. Name 0
Antworten:
2 für die Antwort № 1Entfernen Sie die LEFT JOIN-Klausel und fügen Sie ein SUB SELECT in Ihre zurückgegebenen Spalten ein. Beachten Sie auch die Klammern, um die OR "s vom AND zu trennen. Versuchen Sie Folgendes (nicht getestet):
SELECT
playerid,
playernum,
CONCAT_WS(". ", SUBSTR(playerfname, 1, 1), playerlname) name,
(SELECT COUNT(*) AS powerplay FROM goalEvents
WHERE (scorer = playerid OR assist1 = playerid OR assist2 = playerid)
AND type="pp") AS PPP
FROM players
WHERE playerteam = 1