【问题标题】:COUNT() rows value in an INNER JOININNER JOIN 中的 COUNT() 行值
【发布时间】:2015-03-19 09:14:14
【问题描述】:

我需要通过计算玩家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"

目前有 2 名球员参加了 2 场比赛。

当前代码返回 1 名球员参加了 4 场比赛。

我试图让 COUNT(matches.playerID) 仅返回 player.playerID = matches.playerID 的匹配项。

非常感谢任何帮助!

【问题讨论】:

  • 首先:您的查询缺少GROUP BY,其次-请检查COUNT 接受的参数(在此查询中,它与COUNT(*) 没有什么不同)
  • 通过查询包含一个组后现在可以工作了,谢谢 zerkms

标签: mysql sql count inner-join


【解决方案1】:

你需要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,而如果唯一匹配的值是NULL,COUNT(m.playerID) 可以为零。

【讨论】:

  • 感谢您的支持,已决定显示即使是 0 场比赛的玩家!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 2012-10-24
    • 2016-11-24
    • 2021-04-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多