本文介紹了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后兩行值的條件增量的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,