给定一个包含这些列数据的表(其他列也是如此,但这些是重要的列):
gameid awayscore homescore
1 3 8
2 4 2
3 4 9
4 15 5
5 0 8
6 4 10
...
我正在寻找的是获得前3场比赛的平均胜利率(假设gameid是他们的比赛顺序),因此,在第6场比赛中,应该是(6 + 8 + 10 = 24,平均8),在第5场比赛(8 + 10 + 5 = 23,平均7.666)等等。然后显示3场比赛平均值最高的周数。
我试着这样做:
SELECT g.gameid,
(SELECT AVG(scores.ave) FROM (SELECT ABS(awayscore-homescore) ave FROM games gs
WHERE (gs.gameid<=g.gameid)
ORDER BY gameid DESC LIMIT 3) scores) margin
FROM `games` g
GROUP BY g.gameid
ORDER BY margin DESC
LIMIT 10;
但是我在'where子句'中得到“未知列'g.gameid'”,我假设因为它是子查询(?)的子查询,并且它丢失了引用?我不知道如何构建它,否则虽然工作正常(如果可能的话)。
答案 0 :(得分:0)
尝试此查询
SELECT g.gameid,
(SELECT AVG(ABS(awayscore-homescore))
FROM games gs
WHERE (gs.gameid<=g.gameid)
AND (gs.gameid>g.gameid-3)
) margin
FROM `games` g
ORDER BY margin DESC
LIMIT 10;
更新如果您想使用gamedate(日期时间)来订购游戏,您可以在每次从以下查询中选择游戏时根据此类别创建游戏订单(gorder)编号。
SELECT g.gameid,
(SELECT AVG(ABS(awayscore-homescore))
FROM
(SELECT awayscore,homescore,@rank:=@rank+1 as gorder
FROM games,(SELECT @rank:=0)r
ORDER BY gamedate ASC
)gs
WHERE (gs.gorder <= g.gorder)
AND (gs.gorder > g.gorder-3)
) margin
FROM (SELECT games.gameid,@rank2:=@rank2+1 as gorder
FROM games,(SELECT @rank2:=0)r2
ORDER BY gamedate ASC) g
ORDER BY margin DESC
LIMIT 10;