I have a problem with a query in an Access database. The database would be for storing and managing basic statistics of a sportsleague. This is my query string:
x
SELECT Participants.Name AS Name
, Count(Games.Participants) AS NumberOfGames
, (
SELECT Name
, Count(Games.Winner)
FROM Participants
INNER JOIN Games
ON Participants.ID = Games.Winner
WHERE Participants.ID = Games.Winner
) AS Won
FROM Participants
INNER JOIN Games
ON Participants.ID = Games.Participants.Value
GROUP BY Participants.Name
ORDER BY Participants.Name;
For some reason, the subquery returns the number of all records, not just the ones where the ID of the winner matches with the ID of the participant, and I can’t figure out why. The content of the subquery works when it isn’t in a subquery. And when I explicitly state the ID of a participant in the WHERE clause of the subquery, it returns correct value for that ID. But I can’t make it work the way I need it.
Advertisement
Answer
I’m guessing that you’ll want to use conditional aggregation:
select
p.name as name,
count(*) as numberofgames,
sum(iif(g.winner = p.id,1,0)) as won
from
participants p inner join games g on p.id = g.participants
group by
p.name
order by
p.name
Here p
& g
are merely aliases to save typing out the table names repeatedly.