2010-08-13 80 views
2

我有一張表,用於存儲每個玩家的每個分數。我想取出最後3個(或更少)並顯示平均值。查找每個人的最後X條記錄的平均數

例子:

TABLE log 
time p_id score 
---- ---- ----- 
12:00 0  10 
14:23 0  25 
14:25 1  30 
16:27 0  70 
17:00 0  80 

現在我想找到所有選手的最後3項的平均...

結果:

p_id avg 
---- --- 
0  58 
1  30 

我應該如何進行?

+0

我已經嘗試了一些東西,並沒有得到任何好處。在做這件事情時,我注意到MySQL發出了一些令人擔憂的事情......'SELECT COUNT(*)FROM log LIMIT 3;'產生5的答案。當然,這不可能是正確的嗎?看來聚合忽略了LIMIT子句,所以'SELECT AVG(score)FROM log WHERE p_id = 0 ORDER BY time DESC LIMIT 3;'產生的平均值爲46.25而不是我所期望的58.333。 – 2010-08-13 13:06:49

+0

添加到Brian Hooper的commetns中,可能需要加入一個子查詢,該子查詢返回最後3行,然後對該結果使用聚合函數 – 2010-08-13 15:11:00

回答

4
SELECT p_id, avg(score) as avg_score 
FROM (
    SELECT p_id, score FROM log ORDER BY time LIMIT 3 
) 
GROUP BY p_id 

應該這樣做。