I have a query that returns the following data:
I am trying to adapt it to sum the total number of runs at each venue. I have come up with the query below but there are two issues:
it is not summing by venue it is summing all runs;
it takes a very long time to run.
Can anyone see what I’m doing wrong?
Thanks
x
SELECT ScorecardBatting.matchId, ScorecardBatting.battingTeam, ScorecardBatting.inningsNo, ScorecardBatting.batsmanId, ScorecardBatting.howDismissed, ScorecardBatting.runs, ScorecardBatting.ballsFaced, Matches.venue, (SELECT SUM(runs) FROM ScorecardBatting WHERE Matches.venue=Matches.venue) AS TOTAL
FROM Matches INNER JOIN ScorecardBatting ON Matches.matchId = ScorecardBatting.matchId
GROUP BY ScorecardBatting.matchId, ScorecardBatting.battingTeam, ScorecardBatting.inningsNo, ScorecardBatting.batsmanId, ScorecardBatting.howDismissed, ScorecardBatting.runs, ScorecardBatting.ballsFaced, Matches.venue;
Advertisement
Answer
If you want the total number of runs for each venue, then a simple aggregation query does what you want:
SELECT Matches.venue, SUM(runs) AS TOTAL
FROM Matches INNER JOIN
ScorecardBatting
ON Matches.matchId = ScorecardBatting.matchId
GROUP BY Matches.venue;
If you want this in your original query, you could join it in:
select . . ., t.total
from Matches inner join
ScorecardBatting
on Matches.matchId = ScorecardBatting.matchId join
(select Matches.venue, sum(runs) AS TOTAL
from Matches INNER JOIN
ScorecardBatting
on Matches.matchId = ScorecardBatting.matchId
group by Matches.venue
) t
on t.venue = matches.venue;
I don’t think you need a group by
fro your query.