【问题标题】:Generating total column in SQL query, joining multiple tables在 SQL 查询中生成总列,连接多个表
【发布时间】:2014-04-10 16:07:19
【问题描述】:

我有一个包含球队、用户和积分交易的联赛系统。

积分表中的每一行都链接到一个用户的 ID,每个用户行都链接到一个团队 ID。

当我从数据库中提取团队时,我还想返回一个列,其中包含该团队的总积分,方法是将与该团队中的用户关联的所有积分相加。我有以下代码可以独立返回正确的总点数:

SELECT SUM(ar_points.amount) AS total_points FROM ar_teams, ar_users, ar_points WHERE ar_teams.id = ar_users.team_id AND ar_users.id = ar_points.user_id AND ar_teams.id = :id

当我拉取正常的团队信息时,它会将结果推送到每个团队的对象中:

$sql = $db->query("SELECT * FROM ar_teams");
$sql->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'Team');
$sql->execute();
return $sql->fetchAll();

我想组合这两个查询,以便将总分值作为另一个属性放入对象中。

【问题讨论】:

  • 你需要按一些列进行分组。

标签: mysql sql join sum


【解决方案1】:
SELECT   ar_teams.*, SUM(ar_points.amount) AS total_points
FROM     ar_teams
    JOIN ar_users  ON ar_users.team_id  = ar_teams.id
    JOIN ar_points ON ar_points.user_id = ar_users.id
GROUP BY ar_teams.id

【讨论】:

  • 完美!现在我有一个问题,如果没有积分条目,团队不会出现在结果中。无论他们是否有积分,我如何获得所有团队,如果没有则返回 0?
  • @Adam:使用LEFT JOIN 而不是JOIN。见A Visual Explanation of SQL Joins
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 2020-06-20
  • 2012-04-27
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多