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

标签 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         |

每个 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/

相关文章:

c++ - 每秒获取传感器的值 C++

php - 如何通过表单上传照片到现有的mySQL

javascript - 我可以在 AJAX post 请求中进行 mysql 查询吗

mysql - 在 Ubuntu 上无人值守安装 Percona/MySQL

MySQL:按字段排序,将空单元格放在末尾

mysql - 在 Node.js 中使用 node-mysql 查找返回的查询对象的值

php - Jquery 可排序连接列表 + PHP/MySQL

mysql - 事务和提交

php - 如何使用php从mysql数据库中选择行

php - 如何连接到网络上另一台计算机上的主机上的mysql