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

MySQL在一个查询中需要两个不同的分组,mysql,Mysql,通过一个查询很难做到这一点: scores ========== | child_name | week | behaviour_score | test | test_score | +---------------------------------------------------------+ | jo | 1 | 75 | 1 | 55 | | jo | 1 | 75

通过一个查询很难做到这一点:

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次测试。行为记录为一周的值,但存储在每一行中-例如,jo在第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
但当然,这给了行为评分太大的值,因为它不能解释在给定的一周内重复的值


是否可以通过一次查询来实现这一点?

您需要首先将每个孩子每周的数据减少为一行,测试总分只有一个(让我们取最大值)行为分数),然后根据以下内容进行查询:

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

您需要首先将数据减少到每个孩子每周一行,测试总分只有一个(让我们取最大值),然后根据以下内容进行查询:

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

太快了。谢谢,威尔修好了。太快了。谢谢,威尔修好。(谢谢修好我的桌子布局)(谢谢修好我的桌子布局)