我有一张这样的 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/