【问题标题】:MySQL Select SUM JOIN WHERE together not workingMySQL Select SUM JOIN WHERE 一起不起作用
【发布时间】:2016-04-01 15:29:57
【问题描述】:

我有问题。 (SQL初学者)。我有两张桌子。

球员(nr, player_id, team_id, name, points, season)

Teams (team_id, team_name, season) - 有一个唯一的 team_id 但team_name 可以根据不同的赛季而有所不同。

我想在特定赛季中对单个 player_id 的所有点求和,我可以这样做:)

    SELECT SUM(players.points), 
           players.player_id, 
           players.team_id, 
           players.season,
           players.nr, 
           players.name 
      FROM players 
     WHERE season='2015/2016' 
  GROUP BY player_id 
  ORDER BY SUM(players.points) DESC 
     LIMIT 30

这对我来说很完美:) 但是,我不知道如何加入团队表来获得 teams.team_name 对应特定季节与 WHERE clousure 相匹配。在这种情况下,season='2015/2016' 具体而言。如果我想总结 2015/2016 赛季球员的积分,我还需要从 2015/2016 赛季获得 team_name。我尝试了 LEFT JOIN 但没有成功:/ 这是我的代码。

    SELECT players.player_id, 
           players.nr, 
           players.name, 
           players.team_id, 
           SUM(players.points), 
           players.season 
      FROM players 
     WHERE players.sezon='2015/2016' 
 LEFT JOIN teams 
        ON (teams.team_id=players.team_id AND teams.season=players.season ) 
  GROUP BY player_id 
  ORDER BY SUM(points) DESC 
     LIMIT 30

感谢您的努力。

【问题讨论】:

  • 我假设 players.seasonplayers.sezon 只是这里的复制/粘贴错误?
  • 是的。在我的示例中使用英语单词。 teams.season=players.season
  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: php mysql join sum where


【解决方案1】:

如果您不想显示没有匹配球队记录的球员记录,请使用 INNER JOIN 而不是 LEFT JOIN

SELECT players.player_id, 
       players.nr, 
       players.name, 
       players.team_id, 
       SUM(players.points), 
       players.season,
       teams.team_name
FROM players 
LEFT JOIN teams 
    ON (teams.team_id = players.team_id AND teams.season = players.season ) 
WHERE players.season = '2015/2016' 
GROUP BY player_id 
ORDER BY SUM(points) DESC 
LIMIT 30

【讨论】:

  • 我想显示球员记录,但球员行没有增加 team_name 值。我想要所有球员表中的球员统计数据和球队表中的球队名称,其中球队 ID 和赛季在两个表格中都是相同的。
  • 这就是为什么你想从你加入的团队表中获取 team_name (teams.team_name) 但正如我所说,如果你不希望显示 team_name = null 的记录,请使用 INNER JOIN 来确定球员被分配到现有球队
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 2013-01-03
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多