mysql选择3个最近的分数,然后是平均分

时间:2017-05-14 17:41:35

标签: php mysql

我需要计算每个玩家3个最近得分(高尔夫回合)的平均得分。如果它对代码/语法很重要,那么只有在它们至少有3个分数时才需要这样做。

我有一个包含以下字段的视图:

round_id
player_id
score
round_date

当新分数输入数据库时​​,我想跟踪并通知。我认为我的选择是将它保存在数据库中(不知何故)或生成适当的PHP代码来做同等的事情。但是考虑到保留在数据库本身内部,它可以/将更好地处理新的数据插入/更新。 PHP将有一个页面需要加载才能执行。

我已经看到了一些嵌套select语句的例子,还有一些有mysql变量的例子(我的基本sql技能,并没有真正进入变量所以需要解释)。似乎没有一个与我的具体需求直接相关。

由于

1 个答案:

答案 0 :(得分:0)

像这样(未经测试):

select player_id, avg(substring_index(substring_index(scores,',',round),',',-1))
from
(
    select 1 round union all select 2 union all select 3
) last_rounds
cross join
(
    select player_id, group_concat(score order by round_date desc) scores
    from player_round
    group by player_id
    having count(*) >= 3
) player_scores
group by player_id