Struggling to do this with one query:
scores
==========
| child_name | week | behaviour_score | test | test_score |
+---------------------------------------------------------+
| jo | 1 | 75 | 1 | 55 |
| jo | 1 | 75 | 2 | 54 |
| jo | 2 | 71 | 1 | 65 |
| jo | 3 | 68 | 1 | 70 |
| jo | 3 | 68 | 2 | 74 |
| jo | 3 | 68 | 3 | 45 |
Each child takes 1 to n tests each week. Behaviour is recorded as a value for the week, but is stored in each row – so e.g. jo’s behaviour for week 1 is 75, and for week 3 is 68. It’s not normalised. I know. Wasn’t my call.
The table contains records like this for many children.
I am trying to return 1 row per child, with name, sum of behaviour, and sum of test scores.
But because behaviour isnt normalised it must only count the value once per week.
So sum of behaviour above is 75+71+68
And sum of test scores is 55+54+65+70+74+45
My first attempt was
SELECT
child_name,
SUM(behaviour_score),
SUM(test_Score)
FROM results
GROUP BY child_name
But of course, that gives too large a value for behaviour score as it doesnt account for the values being duplicated for a given week.
Is it possible to achieve this with one query?
You need to first reduce the data into one row per child, per week with the total test score but only one (let’s take the MAX) behavior score), then base your query on that: