MySQL在一个查询中需要两个不同的分组

时间:2011-09-23 21:47:59

标签: mysql

在一个查询中努力做到这一点:

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

但是,当然,这给行为评分的值太大,因为它没有考虑给定周内重复的值。

是否可以通过一个查询来实现这一目标?

1 个答案:

答案 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