我必须计算足球队的目标差异.基本上它是:(goalsScoredAtHome + goalsScoredAway) - (goalsConciededAtHome + goalsConciededAway)一切都保存在一个表中:
homeTeam | awayTeam | goalsHome | goalsAway
USA | Poland | 2 | 0
Poland | USA | 3 | 1
Run Code Online (Sandbox Code Playgroud)
这是我有4个单独的查询:
(select sum(goalsHome) as GoalsScoredHome from game where home = 'USA'
+
select sum(goalsAway) as GoalsScoredAway from game where away = 'USA')
-
(select sum(goalsAway) as GoalsConciededHome from game where home = 'USA'
+
select sum(goalsHome) as GoalsConciededAway from game where away = 'USA')
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个查询中执行此操作?
查询的直接翻译使用条件聚合:
select (sum(case when home = 'USA' then goalsHome else 0 end) +
sum(case when away = 'USA' then goalsAway else 0 end)
) -
(sum(case when home = 'USA' then goalsAway else 0 end) +
sum(case when away = 'USA' then goalsHome else 0 end)
)
from game;
Run Code Online (Sandbox Code Playgroud)
您可以将其简化为:
select (sum(case when home = 'USA' then goalsHome - goalsAway else 0 end) +
sum(case when away = 'USA' then goalsAway - goalsHome else 0 end)
)
from game;
Run Code Online (Sandbox Code Playgroud)