我有一个具有以下布局的表格:
CREATE TABLE uploads (
id INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
user CHAR( 32 ) NOT NULL,
score INTEGER NOT NULL,
);
我正在尝试计算每个用户最近 10 个分数的平均值。
我已经尝试了多种不同的 SQL 查询,所有这些查询似乎都无法正常工作,所以我不会将它们粘贴到这里:(
以下查询适用于获取单个用户的平均值,但我无法让它按用户列分组或基于用户字段执行相关子查询。
从中选择平均值(分数)(从上传中选择分数,其中 user="TEST"按 id 限制 10 排序)
最佳答案
我不确定这在 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
民主党的观点很好。要为每个用户获取一行,您可以这样做:
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
我将重复值放入子查询中,这样 SELECT 中的子查询就不会被计算太多次。使用用户表代替子查询也是一个好主意。
关于sql - 使用 SQL 计算 AVG,限制为最后 10 行并按 SQLite 中的字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307997/