gpt4 book ai didi

mysql - 足球 SQL 查询 Home- 和 Roadteam 问题

转载 作者:行者123 更新时间:2023-11-29 03:11:36 24 4
gpt4 key购买 nike

在足球环境中,我想显示当前的排名。含义:每队的得分和目标。相关表格类似于下表(已简化)。

匹配表

uid  (PK)      hometeamid      roadteamid
------------------------------------------------------------------

结果表

uid (PK)      hometeamscore   roadteamscore       resulttype (45min, 90min, ..)
-------------------------------------------------------------------

团队表

uid (PK)       name            shortname           icon
------------------------------------------------------------------

现在我不明白如何在一个查询中写入排名。我设法编写了一个查询,该查询仅返回“主场比赛”-排名。我想这是最简单的部分。无论如何,这是它的样子:

SELECT  ht.name, 
Count(*) As matches,
SUM(res.hometeamscore) AS goals,
SUM(res.roadteamscore) AS opponentgoals,
SUM(res.hometeamscore - res.roadteamscore) AS goalDifference,
SUM(res.hometeamscore > res.roadteamscore) * 3 + SUM(res.hometeamscore = res.roadteamscore) As Points

FROM league_league l

JOIN league_gameday gd
ON gd.leagueid = l.uid

JOIN league_match m
ON m.gamedayid = gd.uid

JOIN league_result res
ON res.matchid = m.uid
AND res.resulttype = 2

JOIN league_team ht
ON m.hometeamid = ht.uid

Where l.uid = 1

Group By ht.uid

Order By points DESC, goalDifference DESC

任何想法如何修改它,它会回家 - 和公路游戏将不胜感激。

非常感谢,
罗宾

最佳答案

创建 View 。如果您的数据不经常更改并且您需要性能,请创建一个或多个预计算表。

MySQL 中的 View 只是从 SELECT 查询动态计算的伪表。使用问题中的 SQL,您可以在家中创建团队结果的 View :CREATE VIEW homegames AS SELECT ...然后对公路比赛做同样的事情。然后很容易在第三个 View 中综合两个 View (您只需要汇总列)。

View 至少有一个缺陷:它们很慢。基于 View 构建的 View 就像使用复杂的子查询,而 MySQL 在这方面相当糟糕。我认为这对您来说不是问题,因为您可能最多要处理数百个游戏。但是,如果您发现这些 View 的查询速度太慢,并且您不使用任何可以缓解这种情况的缓存,那么请使用简单的表而不是 View 。当然,您需要使它们保持同步。您可以在每次有新游戏时TRUNCATEINSERT INTO homegames SELECT ...,或者您可以更聪明地UPDATE 表格.两者都是正确的,具体取决于您的需要。

关于mysql - 足球 SQL 查询 Home- 和 Roadteam 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com