我有一张表基本上是足球比赛的日历条目,看起来像这样
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列上没有匹配团队的值。但是我无法弄清楚如何在同一时间进行联合和求和。
答案 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语句的名称/别名。如果您认为可以提高可读性,则可以添加team
和score
。但是,这不是必需的。
修改:添加了LOWER
,即组不区分大小写。