我有一张表基本上是足球比赛的日历条目,看起来像这样
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,即组不区分大小写.