本文介绍了MySQL中INSERT后两行值的条件增量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前在足球数据库中有以下三个表:
teams(name)
season(name, beginning, end)
game(id, Date, season, hometeam, awayteam, HomeTeamScore, AwayTeamScore)
(hometeam, awayteam and season are foreign keys)
现在我想要一个新的表,用来记录每支球队的得分和丢球情况,以及他们在每个赛季的得分(每次平局一分,每次胜利三分)。这将使其能够轻松获得排名。
我想过做这样一张表:
stats(season, team, goalsscored, goalsconcedded, points)
然后我还会在每次插入新游戏时更新它。该表将为每个球队+赛季组合包含一行。我不确定这是不是最好的解决方案,因为我知道我引入了冗余,但由于此信息需要经常计算,我认为它可能有用。我想创建一个触发器来更新此信息,但我不知道如何做到这一点:我必须更新统计表中的两行,这取决于哪支球队正在打这场比赛,并且根据他们是在主场还是客场比赛,我需要用不同的值来更新这些行。
理想情况下,如果还没有为比赛所指的赛季插入球队,则此触发器应该会在这个新表中创建一个条目,但我甚至不确定MySQL中是否可能出现这种情况。 我知道我没有提供我所做的任何测试,但这是因为我确实在网上找不到类似的请求(或者更广泛地说,为了能够轻松地查询所请求的信息)。
此外,对于如何处理这种情况,我愿意接受更好的想法。
推荐答案
只有一个视图比使用触发器维护冗余数据容易得多;这只是一个联合的基本总和:
create view stats as (
select season, team, sum(goalsscored) goalsscored, sum(goalsconcedded) goalsconcedded, sum(points) points
from (
select season, hometeam team, HomeTeamScore goalsscored, AwayTeamScore goalsconcedded,
case when HomeTeamScore > AwayTeamScore then 3 when HomeTeamScore=AwayTeamScore then 1 else 0 end points
from game
union all
select season, awayteam team, AwayTeamScore goalsscored, HomeTeamScore goalsconcedded,
case when AwayTeamScore > HomeTeamScore then 3 when AwayTeamScore=HomeTeamScore then 1 else 0 end points
from game
) games
group by season, team
);
这篇关于MySQL中INSERT后两行值的条件增量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!