在一个查询中努力做到这一点:
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 |
每个孩子每周需要进行1到n次测试。行为被记录为一周的值,但存储在每一行中 - 例如,第1周的乔的行为是75,而第3周的行为是68.它没有正常化。我知道。不是我的电话。
该表包含许多孩子的记录。
我试图为每个孩子返回1行,包括姓名,行为总和以及考试成绩总和。 但由于行为不规范,因此每周只能计算一次。
上面的行为总和是75 + 71 + 68 考试成绩总和为55 + 54 + 65 + 70 + 74 + 45
我的第一次尝试是
SELECT
child_name,
SUM(behaviour_score),
SUM(test_Score)
FROM results
GROUP BY child_name
但是,当然,这给行为评分的值太大,因为它没有考虑给定周内重复的值。
是否可以通过一个查询来实现这一目标?
答案 0 :(得分:3)
您需要首先将每个孩子每周的数据减少到一行,总测试分数,但只有一个(让我们采用MAX)行为得分),然后将您的查询基于:
SELECT
child_name,
SUM(behaviour_score),
SUM(test_Score)
FROM (
SELECT child_name, MAX(behavior_score), SUM(test_Score)
FROM result GROUP BY child_name, week
) AS OnePerWeek
GROUP BY child_name