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

标签 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 创建一个 View ,然后使用第二个 View 来计算平均值。

最佳答案

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;

关于mysql - 表中每个组的底部 N 行的列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5284661/

相关文章:

PHP MySQL 调用过程并继续

sql - 根据条件选择相同列作为不同列

sql - 超前/滞后中的偏移子查询

使用 'like' 时 Mysql 日期时间索引不工作

java - 使用 jdbcTemplate 显示两个表中的多条记录

mysql - 错误 1045 : Transferring SQL database from one server to another

c++ - 海量数据插入SQL Server?

Pandas groupby agg 应用具有多个参数的函数

Delphi 客户端数据集查找/聚合

many-to-many - DDD : nested aggregates and many to many relationships