我需要通过计算玩家ID出现在另一个表上的次数来计算玩家玩过的游戏数量,下面是我一直在玩的代码:
SELECT players.playerID, players.fName, players.lName, matches.playerID, COUNT(matches.playerID) AS 'gamesPlayed'
FROM players
INNER JOIN matches
ON matches.playerID = players.playerID
WHERE players.playerID=matches.playerID
ORDER BY gamesPlayed"目前有两名球员打了两场比赛。
当前代码返回1名球员已经打了4场比赛。
我试图让计数( matches.playerID )只返回与players.playerID =matches.playerID匹配的位置。
任何帮助都是非常感谢的!
发布于 2015-01-20 23:52:48
你需要GROUP BY
SELECT p.playerID, p.fName, p.lName, COUNT(*) AS gamesPlayed
FROM players p INNER JOIN matches m
ON p.playerID = m.playerID
GROUP BY p.playerID, p.fName, p.lName
ORDER BY gamesPlayed如果您想要的玩家甚至没有玩过任何游戏,那么:
SELECT p.playerID, p.fName, p.lName, COUNT(m.playerID) AS gamesPlayed
FROM players p LEFT JOIN matches m
ON p.playerID = m.playerID
GROUP BY p.playerID, p.fName, p.lName
ORDER BY gamesPlayed我之所以在上面使用COUNT(m.playerID)而不是COUNT(*),是因为在这个实例中,COUNT(*)总是至少是一个,而如果唯一匹配的值是NULL,则COUNT(m.playerID)可以是零。
发布于 2015-01-20 23:57:55
首先:您的查询缺少BY组,第二部分请检查参数计数接受哪些参数(在这个查询中,它与COUNT(*)) - zerkms没有什么不同
https://stackoverflow.com/questions/28057264
复制相似问题