【问题标题】:Sum the result of a SELECT that returns several rows对返回多行的 SELECT 的结果求和
【发布时间】:2016-11-15 18:26:30
【问题描述】:

我正在尝试对返回多行的选择结果求和: 我有四个表(用户、团队、飞行员、结果):

user (id_user)
team (id_user, id_team)
pilot (id_pilot, id_team)
result (id_pilot, id_gp, points)

当我这样做时:

SELECT p.id_team, SUM( r.points ) AS TOTAL
FROM pilot p
LEFT JOIN result r ON p.id_pilot = r.id_pilot
WHERE r.id_grand_prix =  '1'
GROUP BY p.id_team

我明白了:

id_team TOTAL
-------------
1 10
2 15
3 5
4 6
5 7

我想要的是,如果 id_user 有 id_team 1 而 2 有 25 分。

我试试看:

UPDATE user AS u 
JOIN has_team ON u.id_user = has_team.id_user 
JOIN (
    SELECT p.id_team, SUM( r.position ) AS TOTAL
    FROM pilot p
    LEFT JOIN result r ON p.id_pilot = r.id_pilot
    WHERE r.id_grand_prix =  '1'
    GROUP BY p.id_team
    ) AS grp 
  ON grp.id_team = has_team.id_team
SET u.points = grp.TOTAL + u.points

但我只有一支球队的积分。

非常感谢提前如何帮助我。

【问题讨论】:

  • 您的示例有新表 has_team 并且未在您的架构中描述。还有id_grand_prixid_gp。最后不清楚你想要什么。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • pilotuser之间有关系吗?
  • 首先感谢您的快速回答。我很新,对不起。没错,has_team 是团队表,id_gp 是 id_grand_prix。我想要的是更新用户表中的一个字段,称为点,用户点是他拥有的团队获得的点的总和。现在希望很明确。

标签: mysql sql select sum


【解决方案1】:

您是否希望获得每个用户而不是每个团队的积分总和?

如果是这样,您的查询可能是这样的:

SELECT u.id_user, SUM( r.points ) AS TOTAL
FROM pilot p
LEFT JOIN result r ON p.id_pilot = r.id_pilot
INNER JOIN team t ON p.id_team = t.id_team
INNER JOIN user u ON t.id_user = u.id_user
WHERE r.id_grand_prix =  '1'
GROUP BY u.id_user

如果不是,您能否说明您需要显示的内容?

【讨论】:

  • 完美!这就是解决方案。工作我很好!非常感谢您完成它!尊重。
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 2022-09-24
  • 2013-04-27
  • 2021-12-08
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多