我有2张桌子。一个列出了英超联赛中得分的所有进球,谁得分了;另一个列出了联赛中每个球员的队数。
我想加入一个连接,以便该表按球员名称汇总总进球数,然后查找该球员的队数。
表A [goal_scorer] [] 1
表B [小队] [] 2
我在下面有SQL查询:
SELECT goal_scorer.*,sum(goal_scorer.number),squads.squad_number
FROM goal_scorer
Inner join squads on goal_scorer.name=squads.player
group by goal_scorer.name
我遇到的问题是结果中“数字”的总和太高,似乎包含重复的行。例如,亚伦·列侬(Aaron Lennon)得分33次,而不是264分,如下所示。
答案 0 :(得分:0)
如果您使用的是 sql-server ,可以尝试吗?
select *
from squads
outer apply(
selecr sum(goal_scorer.number) as score
from goal_scorer where goal_scorer.name=squads.player
)x
答案 1 :(得分:0)
也许您想要这样的东西?
SELECT goal_scorer.*, s.total, squads.squad_number
FROM goal_scorer
LEFT JOIN (
SELECT name, sum(number) as total
FROM goal_scorer
GROUP BY name
) s on s.name = goal_scorer.name
JOIN squads on goal_scorer.name=squads.player
还有其他方法可以做到,但是这里我使用子查询来按玩家获得总数。注意:大多数现代SQL平台也支持窗口功能。
此外,可能不需要在子查询上保留左侧(因为我们知道总会有至少一个名称),但是我把它放在您的实际用例更加复杂的情况下。