【问题标题】:Trouble joining two tables from select statements从 select 语句中连接两个表时遇到问题
【发布时间】:2020-01-31 03:08:34
【问题描述】:

到目前为止,我已经写了一个选择语句,获取球队的名称和他们在主场比赛中的平均得分以及他们承认给另一支球队的平均得分。

当球队离开时,我还有另一支球队,我在其中选择了客场球队以及他们离开时的平均得分和平均失球。

如何从选择查询中连接这两个表,以便得到一个包含球队名称、主场平均得分、主场平均失球、客场平均失球和客场平均得分的表格?

这是我的代码:

select home_team, avg(home_score_half + home_score_full) as avg_scored_home, 
       avg(away_score_half + away_score_full) as avg_conceded_home 
from matches 
group by home_team;

select away_team, avg(away_score_half + away_score_full) as avg_scored_away, 
       avg(home_score_half + home_score_full) as avg_conceded_away 
from matches 
group by away_team;

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 试试UNION [ALL]
  • 您希望将所有行放在一起:这就是 UNION。如果你想从不同的表中添加相同的行字段,那么 JOIN 是你的朋友
  • 考虑查看stackoverflow.com/questions/10538539/… 这个答案解释了如何创建一个结果集,在您的情况下,该结果集具有以下列:Team name, avg_scored_home, avg_conceded_home, avg_scored_away, avg_conceded_away

标签: mysql sql


【解决方案1】:

如果您希望结果加入(每个团队在同一行),您可以使用这两个查询作为加入的子查询

select  t1.home_team
      , t1.avg_scored_home
      , t1.avg_conceded_home
      , t2.away_team
      , t2.avg_scored_away
      , t2.avg_conceded_away
from (
  select home_team
      , avg(home_score_half + home_score_full) as avg_scored_home
      , avg(away_score_half + away_score_full) as avg_conceded_home 
  from matches 
  group by home_team
) t1 
INNER JOIN (
  select away_team
    , avg(away_score_half + away_score_full) as avg_scored_away
    , avg(home_score_half + home_score_full) as avg_conceded_away 
  from matches group by away_team
) t2 ON t1.home_team = t2.away_team

【讨论】:

  • 他们可以是两个不同的球队,那么ON子句怎么能是 home_team = away_team 呢?
  • @BilalSiddiqui .. 这个问题对我来说似乎很清楚 ..“所以我得到了一个带有球队名称、主场平均得分、主场平均失球、客场平均失球和客场平均得分的球队”
  • 谢谢!正是我想要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2017-08-31
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多