MySQL中INSERT后两行值的条件增量

Conditional increment of values in two rows after insert in MySQL(MySQL中INSERT后两行值的条件增量)
本文介绍了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后两行值的条件增量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)