【发布时间】: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_prix和id_gp。最后不清楚你想要什么。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 -
pilot和user之间有关系吗? -
首先感谢您的快速回答。我很新,对不起。没错,has_team 是团队表,id_gp 是 id_grand_prix。我想要的是更新用户表中的一个字段,称为点,用户点是他拥有的团队获得的点的总和。现在希望很明确。