I am having an issue with my query, trying to calculate the change in score between terms and session and each time I try to slice by the session as shown in the query below, the change column returns 'null' in all rows but if I do remove the session slice, the change column returns the needed values.
ca table
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
exam table
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
query
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
The expected output I meant to look like this
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
The change in score is the difference between terms e.g 2nd-1st and 3rd-2nd
Is there a workaround around this? I have tried everything I know can't seem to find why it is responding this way or what the issue might be.
twogot lost here? is it for reason? - Mikhail Berlyant