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后两行值的条件增量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:MySQL中INSERT后两行值的条件增量
基础教程推荐
猜你喜欢
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- oracle区分大小写的原因? 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- 在多列上分布任意行 2021-01-01
