SQLite:包含用户每个时期的最大分数的表

标签 sql sqlite

我有一张这样的 table :

USER    PERIOD  SCORE
A       1       8
A       1       9
A       2       2
A       2       3
A       3       4
A       3       5
B       1       2
B       1       3
B       2       5
B       2       4
B       3       4
B       3       4
C       1       2
C       1       3
C       2       3
C       2       5
C       3       3
C       3       4

我需要计算每个用户每个时期的平均分数,所以我需要将一个表转换成这个
USER    PERIOD  SCORE
A       1       8.5
A       2       2.5
A       3       4.5
B       1       2.5
B       2       4.5
B       3       4
C       1       2.5
C       2       4
C       3       3.5

然后最后,我需要创建一个表,其中只有每个时期的最高分和相应的用户,就像这样
USER    PERIOD  SCORE
A       1       8.5
B       2       4.5
A       3       4.5

我可以通过创建两个表来做到这一点,但我想成为一个花哨的查询者,一步完成。任何指针?到目前为止,这些是我的查询:
CREATE TABLE STEP1 AS SELECT
    USER
    ,PERIOD
    ,AVG(SCORE) AS SCORE
FROM STEP0
GROUP BY 1,2
;
CREATE TABLE STEP2 AS SELECT
    PERIOD
    ,MAX(SCORE) AS SCORE
FROM STEP1
GROUP BY 1
;
CREATE TABLE FINAL AS SELECT
    A.USER
    ,B.PERIOD
    ,B.SCORE
FROM STEP1 A
    JOIN STEP2 B
        ON A.SCORE=B.SCORE
;

我正在使用 SQLite DB Browser,但如果我所要求的不能使用它来完成,即我们需要 SQLite DB Browser 中不可用的功能,我可以使用另一个 SQL 应用程序。

最佳答案

尝试使用 NOT EXISTS() :

CREATE TABLE FINAL AS 
SELECT tt.* 
FROM (
    SELECT t.user,t.period,AVG(t.score) as score
    FROM STEP0 t
    GROUP BY t.user,t.period ) tt
WHERE NOT EXISTS (SELECT 1 FROM STEP0 s
                  WHERE s.period = tt.period
                  GROUP BY s.user
                  HAVING AVG(s.score) > tt.score)

关于SQLite:包含用户每个时期的最大分数的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39940826/

相关文章:

c# - 如何通过 LINQ-to-SQL 和普通 SQL-Server 比较查询的性能

sql - 需要左表的所有记录,但如果右表匹配,我有进一步的限制

Flutter/SQFLite 添加行 rawInsert

sqlite - 使用 SQLite 加载多个 CSV 文件

java如何区分文件编码ISO-8859-1和UTF-8?

python - 使用 sqlite 在 Django 中进行查询过滤

android - SQLiteLog :(1) no such table: tableName. db (sqlite with android)

c# - 创建 linq 查询以使用与智能手机相同的方式搜索联系人

c# - 在存储过程或应用程序中处理事务的最佳位置在哪里?

sql - 如何更新 postgres 中时间戳字段的一部分?