我有一张桌子,可以存储每个玩家的每个分数。我想取出最后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
我该怎么办?
答案 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