2015-01-20 158 views
0

我需要通过计算他的玩家ID出现在另一张桌子上的次数来计算玩家玩过的游戏数量,下面是我玩过的代码:INNER JOIN中的COUNT()行值

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" 

目前有2名玩家玩过2场比赛。

当前代码返回1个玩家玩过4场比赛。

我想让COUNT(matches.playerID)返回唯一的匹配,其中players.playerID = matches.playerID。

任何帮助非常感谢!如果你想甚至谁发挥零个游戏,那么玩家

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(*)

+1

在首位:您的查询缺少'GROUP BY',第二个 - 请检查COUNT'接受的参数(在这个查询中它与COUNT(*)'没有什么不同) – zerkms 2015-01-20 23:46:05

+0

包含一个由查询组成的组现在可以工作了,谢谢zerkms – Neil 2015-01-20 23:56:38

回答

1

您需要GROUP BY在这种情况下总是至少有一个,如果唯一匹配的值是NULL,则COUNT(m.playerID)可以为零。

+0

谢谢你,决定向玩家展示0场比赛! – Neil 2015-01-21 00:23:50

0

在首位:您的查询缺少GROUP BY,在第二 - 请检查什么参数COUNT接受(在这个查询它没有从COUNT(*)不同) - zerkms