查找每个人的最后X条记录的平均值

时间:2010-08-13 09:58:33

标签: mysql

我有一张桌子,可以存储每个玩家的每个分数。我想取出最后3个(或更少)并显示平均值。

示例:

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

我该怎么办?

3 个答案:

答案 0 :(得分:5)

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

应该这样做。

答案 1 :(得分:1)

x/1dw将不起作用,请改用limit(mysql)

row_number()

答案 2 :(得分:1)

对于8.0之前的MySql版本,如果没有窗口功能,则可以使用相关的子查询:

select l.p_id, round(avg(l.score), 0) avg
from log l
where (select count(*) from log where p_id = l.p_id and time >= l.time) <= 3
group by l.p_id

请参见demo
结果:

> p_id | avg
> ---: | --:
>    0 |  58
>    1 |  30