表中每个组的底部N行的列的平均值

时间:2011-03-12 18:54:07

标签: mysql sql aggregate

我想得到最后5行的一个列的平均值(如果玩家少于5行(游戏)那么它应该什么也不返回..)

如果我可以使用子查询,那么它将是直接的,但由于不支持,我不知道如何处理它。

下面的sql是我到目前为止所拥有的,如果玩家玩了超过5场游戏,这将获得每个玩家所有游戏的平均值。

CREATE VIEW last_5_avg
AS
   SELECT player, avg(score) FROM game_stats
 JOIN games
ON games.id = games_stats.id GROUP BY player HAVING COUNT(games.id) > 4
ORDER BY games.id DESC;

看起来解决此问题的唯一方法是为每个玩家的最后5个game_stats创建一个视图,然后使用第二个视图来执行平均值。

3 个答案:

答案 0 :(得分:1)

select player, avg(score) 
from game_stats
inner join games g0 on g0.id = games_stats.id 
where g0.id in (
    select g1.id
    from games g1
    where g1.id = g0.id
    order by g1.id desc
    limit 5
    )
group by player 
having count(g0.id) > 4
order by g0.id desc;

答案 1 :(得分:0)

使用LIMIT。

XXXXXXX ORDER BY games.id DESC LIMIT 5;

确保您的条件符合以下顺序 -

HAVING ---> ORDER BY ---> LIMIT

参考http://dev.mysql.com/doc/refman/5.1/en/select.html

答案 2 :(得分:0)

http://dev.mysql.com/doc/refman/5.0/en/select.html

我认为LIMIT就是你想要的。