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

标签 sql sqlite

我有一个具有以下布局的表格:

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/

相关文章:

sql - 带有两个参数的 Rails 查询在生产环境中不起作用 : Operator does not exist

javascript - 如果电子邮件存在,如何将输入值留空

MySQL查询将行插入到列中没有特定值的表中

sql - 如何查询sqflite flutter 打多个whereArgs?

ios - 模拟器中的 libsqlite 和 iOS 编译

Python sqlite3 库无法使用 URI,即使 sqlite3 版本应该能够

sql - 检索列中的重复项并列出并计算它们(DB2 上的 SQL)

mysql - 长文本字段的数据过滤

c# - SQLite net PCL - 简单选择

java - 如何将图像保存到 Room Persistence Library