4

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

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'

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

我知道我在进行联合时不会计算总和,但我认为我需要进行联合以保留在 teams2 列上没有匹配团队的值。但是我不知道如何同时进行联合和求和。

4

1 回答 1

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

编辑:在 aUNION中,联合后的选择语句的名称/别名被忽略。如果您认为它可以提高可读性,您可以添加teamand 。score但是,这不是必需的。

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

于 2012-04-12T22:02:44.480 回答