使用SQL计算AVG限制为最后10行,并按SQLite中的字段进行分组

时间:2012-09-06 20:37:23

标签: sql sqlite

我有一张包含以下布局的表格:

CREATE TABLE uploads ( 
    id      INTEGER     PRIMARY KEY AUTOINCREMENT
                        NOT NULL,
    user    CHAR( 32 )  NOT NULL,
    score   INTEGER     NOT NULL,
);

我正在尝试计算每个用户最近10个分数的平均值。

我尝试了很多不同的SQL查询,所有这些查询似乎都没有接近工作,所以我不会在这里粘贴任何一个:(

以下查询适用于获取单个用户的平均值,但我无法通过用户列或基于用户字段执行相关子查询来使其工作。

选择平均值(得分)(从上传中选择得分,其中用户=“TEST”按ID限制排序10)

1 个答案:

答案 0 :(得分:1)

我不认为这在SQLite中有效,但这是获得此结果的标准SQL方法:

select u.*
       (select avg(score*1.0) from (select * from uploads u2 where u2.user = u.user order by id desc limit 10)) as avg10
from uploads u

Dems提出了一个很好的观点。要为每个用户获取一行,您可以执行以下操作:

select u.user,
       (select avg(score*1.0) from (select * uploads u2 where u2.user = u.user order by id desc limit 10) t) as avg10
from (select distinct user
      from uploads
     ) u

我将distinct放在子查询中,因此SELECT中的子查询的计算次数不会太多。用户表也是一个好主意,而不是子查询。