标题可能有点混乱,但我想没有简单的方法可以说出来。这就是问题:
我有两张桌子。其中一个列出了足球比赛,其中大约 3.000 场,每场都有单独的 ID。第二个表包含投注赔率,全部在一个表中,每行有一个 ID,三列 Home、Draw 和 Away 表示赔率。
当我想提取特定比赛的最大主场赔率时没有问题(添加到 WHERE 子句的 ID)。检查大约 30 行并返回最大值。
当我想检查每场比赛的所有最大值时,就会出现问题,因为所有主场赔率都在同一列中。因此,对于所有匹配,将返回整列的最大值,而不是与匹配相关的最大值。
赛程表包含有关比赛的信息。很简单,3 列,再加上三个应该从另一个表中提取的最高值:
比赛 ID、赛事名称、开始日期、TopHomeOdds、TopDrawOdds、TopAwayOdds。
该odds
表有多个相同匹配的行。
match ID, event name, bookmaker, homeOdds, drawOdds, awayOdds
123456 TeamA-TeamB Bookmaker1 1.60 3.00 4.05
123456 TeamA-TeamB Bookmaker2 1.55 3.05 4.00
123456 TeamA-TeamB Bookmaker3 1.65 2.95 4.10
我想提取最大值(在上面的示例中,它将是 1.65、3.05、4.10),因此我可以将这些值插入到第一个表中。插入不是问题,获得最大值是。我想应该使用一些聪明的 JOIN 查询,这就是你们中的一个人介入的地方……在此先感谢。
这是不准确地返回所有 homeOdds、drawOdds 和
awayOdds, so the output is something like:
123456 match1 startdate 29.00 4.00 13.50
234567 match2 startdate 29.00 4.00 13.50
345678 match3 startdate 29.00 4.00 13.50
所有结果都是相同的,因为最大值与匹配本身无关,但会返回整个列的一般最大值。
SELECT fixtures.matchid AS eventid, fixtures.matchdate AS eventstartdate,
fixtures.eventname AS eventname, MAX(odds.homeOdds) AS TopHomeOdds,
MAX(odds.drawOdds) AS TopDrawOdds, MAX(odds.awayOdds) AS TopAwayOdds
FROM
fixtures
INNER JOIN odds ON odds.matchid=fixtures.matchid
最后一部分,一般的 INNER JOIN,就是问题所在。我希望它对匹配 ID 具有选择性,并且我希望它只返回具有与第一个表中的匹配相关的行 ID 的列的最大值。