在数据库上执行计算
performing calculations on a database
我有一个包含一些示例数据的数据库设置。我在一个 table 中有许多球队,在另一个中有他们的固定装置,我有他们已经参加的比赛的分数。我正在为计算他们的输赢的逻辑而苦苦挣扎。我应该在更新结果时(在固定装置 table 中)在团队 table 中更新它,还是根据固定装置 table 中的分数计算它。我不愿意用第一种方式来做,因为它可能被认为是重复数据,但无法弄清楚如何计算它的逻辑。正如您可能会说的那样,这是我处理 tables.
之间关系的第一个数据库
我正在尝试将上述 table 的数据呈现给联盟 table。为了获得积分,我需要计算比赛 won/d/lost 而这正是我不知道该怎么做的(计算主队对客队的次数等)
如果我可以从赛程中计算出来,我会从团队中移除大部分列 table。
与各种类型的运动球相关的数据集和计算出奇地复杂。我已经编写了代码来根据竞技场可用性生成赛程表,但这并不好玩。
无论如何,为了生成您想要的报告而不在整个地方复制数据,像下面这样的东西 应该 工作,虽然我还没有能够测试它。
SELECT t.team_name,
hr.home_win, hr.home_loss, hr.home_draw,
ar.away_win, ar.away_loss, ar.away_draw
FROM teams t
-- home record
INNER JOIN (
SELECT home_team AS 'team_name',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'home_win',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'home_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'home_draw'
FROM fixtures
GROUP BY home_team
) hr ON t.team_name = hr.team_name
-- away record
INNER JOIN (
SELECT away_team AS 'team_name',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'away_win',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'away_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'away_draw'
FROM fixtures
GROUP BY away_team
) ar ON t.team_name = ar.team_name
现在,普通 RDBMS 将只使用 COUNT(scoreA>scoreB)
,但由于这是 MySQL,我不得不用 SUM(IF())
捏造它。 fiddle
假设您不会拥有数千个团队,这应该可以很好地扩展。
我有一个包含一些示例数据的数据库设置。我在一个 table 中有许多球队,在另一个中有他们的固定装置,我有他们已经参加的比赛的分数。我正在为计算他们的输赢的逻辑而苦苦挣扎。我应该在更新结果时(在固定装置 table 中)在团队 table 中更新它,还是根据固定装置 table 中的分数计算它。我不愿意用第一种方式来做,因为它可能被认为是重复数据,但无法弄清楚如何计算它的逻辑。正如您可能会说的那样,这是我处理 tables.
之间关系的第一个数据库我正在尝试将上述 table 的数据呈现给联盟 table。为了获得积分,我需要计算比赛 won/d/lost 而这正是我不知道该怎么做的(计算主队对客队的次数等)
如果我可以从赛程中计算出来,我会从团队中移除大部分列 table。
与各种类型的运动球相关的数据集和计算出奇地复杂。我已经编写了代码来根据竞技场可用性生成赛程表,但这并不好玩。
无论如何,为了生成您想要的报告而不在整个地方复制数据,像下面这样的东西 应该 工作,虽然我还没有能够测试它。
SELECT t.team_name,
hr.home_win, hr.home_loss, hr.home_draw,
ar.away_win, ar.away_loss, ar.away_draw
FROM teams t
-- home record
INNER JOIN (
SELECT home_team AS 'team_name',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'home_win',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'home_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'home_draw'
FROM fixtures
GROUP BY home_team
) hr ON t.team_name = hr.team_name
-- away record
INNER JOIN (
SELECT away_team AS 'team_name',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'away_win',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'away_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'away_draw'
FROM fixtures
GROUP BY away_team
) ar ON t.team_name = ar.team_name
现在,普通 RDBMS 将只使用 COUNT(scoreA>scoreB)
,但由于这是 MySQL,我不得不用 SUM(IF())
捏造它。 fiddle
假设您不会拥有数千个团队,这应该可以很好地扩展。