INNER JOIN 中的 COUNT() 行值

COUNT() rows value in an INNER JOIN

我需要通过计算玩家 ID 在另一个 table 上出现的次数来计算玩家玩过的游戏数量,这是我一直在玩的代码:

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场比赛

当前代码returns 1 名球员已经打了 4 场比赛。

我试图让 COUNT(matches.playerID) 到 return 只匹配 players.playerID = matches.playerID.

非常感谢任何帮助!

您需要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(*) 在这种情况下总是至少为 1,而 COUNT(m.playerID) 可以为零如果唯一匹配的值是 NULL.

首先:您的查询缺少 GROUP BY,其次 - 请检查 COUNT 接受的参数(在此查询中它与 COUNT(*) 没有区别)– zerkms