mysql两个表,相同的条目名称添加值

我有一张表基本上是足球比赛的日历条目,看起来像这样

team1 || team1score || team2|| team2score || time || league

我想根据日历表中的条目更新我的职位表.

所以,例如,如果我在我的表中有类似的东西

Pats   || 14 || Saints || 3  || 1stleague
Cows   || 7  || falc   || 14 || 1stleague
Saints || 31 || falc   || 3  || 1stleague
Saints || 14 || cows   || 3  || 1stleague

我想要一个查询,它首先将team1score列中的所有值与不同的team1name相加.因此,对于上表,它将给出结果

Pats   || 14
Cows   || 7
Saints || 45

那么我想为team2和team2score做同样的事情,结果就是这样

Saints || 3
falc   || 17
cows   || 3

然后我想加入这两个结果并得到:

Pats   || 14
Cows   || 10
Saints || 48
falc   || 17

我试过这样的事

select distinct(t.team1), sum(t.team1score)
  from calendar t
  where league = '5a7'
  UNION
    select distinct(t2.team2), sum(t2.team2score)
    from calendar t2
    where league = '5a7'

但它没有添加相同的团队得分任何想法?

我知道我在工会时不会拿这笔款项,但我认为我需要联盟以保持team2列上没有匹配团队的值.但是我无法弄清楚如何在同一时间进行联合和求和.

最佳答案 使用子查询创建team1和team2列的联合,在外部查询中聚合分数(仅):

SELECT LOWER(t.team) team, SUM(t.score) score
FROM (
    SELECT team1 team, team1score score
    FROM calendar
    WHERE league='5a7'
    UNION ALL
    SELECT team2, team2score
    FROM calendar
    WHERE league='5a7'
) t
GROUP BY 1

编辑:在UNION中,将忽略union之后的select语句的名称/别名.如果您认为可以提高可读性,则可以添加团队和分数.但是,它不是必需的.

编辑:添加LOWER,即组不区分大小写.

点赞