很难通过一个查询来做到这一点:
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 |
每个 child 每周参加 1 到 n 次测试。行为被记录为一周的值,但存储在每一行中 - 例如jo 第 1 周的行为是 75,第 3 周的行为是 68。它没有标准化。我知道。不是我打来的电话。
该表包含许多 child 的此类记录。
我试图为每个 child 返回 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
但是,当然,这给出了太大的行为得分值,因为它没有考虑到给定一周内重复的值。
是否可以通过一个查询来实现这一目标?
最佳答案
您需要首先将数据减少为每个 child 每周一行的总测试分数,但只有一个(让我们取最大)行为分数),然后基于此进行查询:
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
关于MySQL 在一个查询中需要两个不同的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535216/