我的查询有问题,试图计算术语和会话之间的分数变化,每次我尝试按会话切片时,如下面的查询所示,更改列在所有行中返回“null”,但如果我删除会话切片,更改列返回所需的值。
卡表
name id subject session term classroom ca_cat score
one 1 maths 2018/2019 1 level1 1 10
one 1 maths 2018/2019 1 level1 2 6
two 2 maths 2018/2019 1 level1 1 9
two 2 maths 2018/2019 1 level1 2 7
one 1 maths 2018/2019 2 level1 1 9
one 1 maths 2018/2019 2 level1 2 8
two 2 maths 2018/2019 2 level1 1 7
two 2 maths 2018/2019 2 level1 2 5
考试桌
name id course session term classroom score
one 1 maths 2018/2019 1 level1 50
two 2 maths 2018/2019 1 level1 49
one 1 maths 2018/2019 2 level1 50
two 2 maths 2018/2019 2 level1 50
询问
select
studentid,
name,
subject,
classroom,
session,
term,
round(avg_score,0) as average_score,
round(avg_score - lag(avg_score, 1) over(partition by name, subject order by session) / 100*100, 0) as change,
from (
select studentid, name, subject, classroom, session, term, avg(totalscore) over(partition by name, classroom, session, term) avg_score
from (
SELECT name, studentid, subject, classroom, session, term, caone, catwo, exam,
caone + catwo + exam AS totalscore
FROM (
SELECT name, studentid, subject, classroom, session, term,
MAX(IF(cacount = 1, ca.score, NULL)) AS caone,
MAX(IF(cacount = 2, ca.score, NULL)) AS catwo,
ANY_VALUE(ex.score) AS exam
FROM `exam` ex
JOIN `catable` ca
USING (name, studentid, subject, classroom, session, term)
GROUP BY name, studentid, subject, classroom, session, term
)
))
where studentid=1 and session='2018/2019' and term=2
group by studentid, name, subject, classroom, session,term, avg_score
我的预期输出是这样的
name, id, subject, classroom, session, term, totalscore change
one 1 math level1 2018/2019 1 66 null
one 1 math level1 2018/2019 2 67 1
two 2 math level1 2018/2019 1 65 null
two 2 math level1 2018/2019 2 62 -3
分数的变化是术语之间的差异,例如 2nd-1st 和 3rd-2nd
有解决方法吗?我已经尝试了所有我所知道的似乎无法找到为什么它会以这种方式响应或问题可能是什么。