2011-03-12 59 views
2

我想獲得最後5行的列的平均值(如果玩家少於5行(遊戲),那麼它應該返回什麼都沒有..)表中每個組的底N行的平均值

如果我可以使用子查詢,那麼它會直截了當,但由於這不支持我不知道如何處理它。

下面的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,然後使用第二個觀點做的平均值。

+0

你用什麼引擎? – 2011-03-12 18:59:29

+0

@Transact Charlie:MyISAM – volting 2011-03-12 19:10:42

回答

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

+0

我已經試過了LIMIT,但它沒有起作用,據我所見,它只是限制放入視圖的行數而不是平均的行數。 – volting 2011-03-12 19:01:10

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; 
+0

我欣賞嘗試,但這不會工作的原因有很多,1)subquerys不支持在視圖中,2)LIMIT不支持subquerys 3)子查詢只選擇底部5行,我需要選擇表中每個組的底部5,就像這個http://stackoverflow.com/questions/3998529/selecting-top-n-rows-for-each-group-in-a-table。 – volting 2011-03-13 11:29:31