在数据库上执行计算

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

假设您不会拥有数千个团队,这应该可以很好地扩展。