I have the following queries which work perfectly.
SELECT possession_team AS Team, ball_carrier_receiver AS Player,
sum(run_pass='P') AS TAR,
sum(pass_result='C') AS REC,
sum(gain) AS YDS,
ROUND(sum(gain) / sum(pass_result='C'),1) as 'AVG COMP',
max(gain) AS LG,
sum(series_end='Touchdown' AND pass_result='C') AS TD,
ROUND((sum(pass_result='C') / sum(run_pass='P')) * 100,1) AS 'COM%'
FROM plays
WHERE run_pass='P' AND pass_result <>'S' AND pass_result <>'R'
GROUP BY possession_team, ball_carrier_receiver;
But I need to get the player's name matched to his stats so the output would be PLAYER NAME, TEAM, JERSEY followed by the sum of his statistics.
I have another table called game_rosters . This has first_name, last_name, team_code and jersey_number. Team_code = possession_team from the plays table, and jersey_number = ballcarrier_receiver_number in the plays table.
I tried a bunch of different statements and joins, but I can't figure it out. Below is the code I've come closest on but it just outputs the PLAYER NAME, TEAM and Jersey listed multiple times (but also lists players who haven't accumulated any of these stats) with no aggregation of any stats.
SELECT concat(fgr.last_name,',',' ',fgr.first_name) AS Player, possession_team AS Team, ball_carrier_receiver AS Jersey FROM football.game_rosters AS fgr
LEFT JOIN football.plays AS fplays ON (fgr.jersey_number = fplays.ball_carrier_receiver);
sum(run_pass='P') AS TAR,
sum(pass_result='C') AS REC,
sum(gain) AS YDS,
ROUND(sum(gain) / sum(pass_result='C'),1) as 'AVG COMP',
max(gain) AS LG,
FROM fplays WHERE run_pass='P' AND pass_result <>'S' AND pass_result <>'R'
GROUP BY fplays.ball_carrier_receiver;
EDIT:
After reading up on Barmar's link below, I tried to do the subquery with sum played from game_rosters table. I can't get it to run, and I've made a mess of it I'm afraid.
SELECT ball_carrier_receiver AS Jersey, possession_team AS Team
FROM plays AS p
LEFT JOIN (
SELECT CONCAT(last_name,', ',' ',first_name) AS Player, team_code AS TEAM,
sum(played) AS GP
FROM game_rosters AS gr
GROUP BY team_code, jersey_number
) AS m
ON m.jersey_number = p.ball_carrier_receiver AND p.possession_team = m.team_code
LEFT JOIN (
SELECT ball_carrier_receiver AS Jersey, possession_team AS Team,
sum(run_pass='P') AS TAR,
sum(pass_result='C') AS REC,
sum(gain) AS YDS,
ROUND(sum(gain) / sum(pass_result='C'),1) as 'AVG COMP',
max(gain) AS LG,
sum(series_end='Touchdown' AND pass_result='C') AS TD,
ROUND((sum(pass_result='C') / sum(run_pass='P')) * 100,1) AS 'COM%'
FROM plays
WHERE run_pass='P' AND pass_result <>'S' AND pass_result <>'R' AND play_null='N'
GROUP BY possession_team, ball_carrier_receiver ORDER BY TAR DESC
) as n
ON m.jersey_number = n.ball_carrier_receiver AND n.possession_team = m.team_code;