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

时间:2012-04-12 21:56:12

标签: 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列上没有匹配团队的值。但是我无法弄清楚如何在同一时间进行联合和求和。

1 个答案:

答案 0 :(得分:2)

使用子查询创建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语句的名称/别名。如果您认为可以提高可读性,则可以添加teamscore。但是,这不是必需的。

修改:添加了LOWER,即组不区分大小写。