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
太快了。谢谢,威尔修好了。太快了。谢谢,威尔修好。(谢谢修好我的桌子布局)(谢谢修好我的桌子布局)