SQL Join查询带来多个结果

时间:2018-11-29 15:24:55

标签: sql mariadb

我有2张桌子。一个列出了英超联赛中得分的所有进球,谁得分了;另一个列出了联赛中每个球员的队数。

我想加入一个连接,以便该表按球员名称汇总总进球数,然后查找该球员的队数。

表A [goal_scorer] [enter image description here] 1

表B [小队] [enter image description here] 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分,如下所示。

enter image description here

2 个答案:

答案 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平台也支持窗口功能。

此外,可能不需要在子查询上保留左侧(因为我们知道总会有至少一个名称),但是我把它放在您的实际用例更加复杂的情况下。