我有一张包含以下布局的表格:
CREATE TABLE uploads (
id INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
user CHAR( 32 ) NOT NULL,
score INTEGER NOT NULL,
);
我正在尝试计算每个用户最近10个分数的平均值。
我尝试了很多不同的SQL查询,所有这些查询似乎都没有接近工作,所以我不会在这里粘贴任何一个:(
以下查询适用于获取单个用户的平均值,但我无法通过用户列或基于用户字段执行相关子查询来使其工作。
选择平均值(得分)(从上传中选择得分,其中用户=“TEST”按ID限制排序10)
答案 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中的子查询的计算次数不会太多。用户表也是一个好主意,而不是子查询。