You need to extract them out as separate items: either by using subqueries or possibly a union query
SELECT Count (match_id) AS played,
Sum(yardley_goals) AS for,
Sum(opposition_goals) AS against,
Sum(yardley_goals-opposition_goals) AS gd,
Sum(points) AS pts,
Sum(t1.won) AS won,
Sum(t2.lost) AS lost,
Sum(t3.drawn) AS drawn
FROM tbl_fixtures
LEFT JOIN (SELECT match_id, 1 AS won FROM tbl_fixtures WHERE result = 'won') AS t1 USING(match_id)
LEFT JOIN (SELECT match_id, 1 AS lost FROM tbl_fixtures WHERE result = 'lost') AS t2 USING(match_id)
LEFT JOIN (SELECT match_id, 1 AS drawn FROM tbl_fixtures WHERE result = 'drawn') AS t3 USING(match_id)
WHERE yardley_goals is not null
Might get some syntax errors there, especially from summing NULL columns, but that is the general idea.
Using a union query would also work. I would do it in 2 queries because on the platforms I use every day a stored view would be more efficient.
vw_results:
SELECT *, 1 AS won, 0 AS lost, 0 AS drawn FROM tbl_fixtures WHERE result = 'won'
UNION
SELECT *, 0 AS won, 1 AS lost, 0 AS drawn FROM tbl_fixtures WHERE result = 'lost'
UNION
SELECT *, 0 AS won, 0 AS lost, 1 AS drawn FROM tbl_fixtures WHERE result = 'drawn';
final query:
SELECT Count (match_id) AS played,
Sum(yardley_goals) AS for,
Sum(opposition_goals) AS against,
Sum(yardley_goals-opposition_goals) AS gd,
Sum(points) AS pts,
Sum(won) AS won,
Sum(lost) AS lost,
Sum(drawn) AS drawn
FROM vw_results
WHERE yardley_goals is not null
I have given the 2 solutions as it is useful to know about different methods. Depending on circumstances one could choose the most appropriate solution: often just by benchmarking them to find the most efficient.
Using a UNION query as a view like that can be very useful if you are going to reuse it in several places. It also makes the code more maintainable by others as the sql is less complex, each part of the logic is clearly visible and modifications easier to debug.