【问题标题】:how to calculate the sum of grades for each student如何计算每个学生的总成绩
【发布时间】:2017-08-21 10:20:43
【问题描述】:

我有一张表用于考试成绩,另一张用于学生(学生表总是只有 10 名学生)。

我想为学生详细信息输出一个 Json 格式的数组,其中包含数组数组中每个学期的成绩总和。

预期输出

[
    {
    "id": "1", -> this is the semester ID
    "student1": {"id": "1","name": "student name", "bio": "50", "chem": "50", "math": "60", "total grades": "160"},
    "student2": {"id": "2","name": "secondstudent name", "bio": "60", "chem": "60", "math": "50", "total grades": "170"},
    }
]

这是我的表格结构

tbStudents

   id   ,    name                
    1   ,    student name        
    2   ,    secondstudent name 
    3   ,    thirdstudent name  

tbGrades

    id   ,  student   ,  semster    ,   bio    ,   chem    ,   math   ,  total
     1   ,     1      ,     1       ,   50     ,    50     ,   60     ,   160
     2   ,     2      ,     1       ,   30     ,    40     ,   20     ,   90
     3   ,     2      ,     1       ,   30     ,    20     ,   30     ,   80

挑战

如何计算每个学生每学期生物、化学、数学、总和的总和,因为学生可能在同一学期有多个成绩

我的尝试

$sql = "SELECT grade.id g_id, grade.semester g_semester, grade.bio g_bio, grade.chem g_chem, grade.math g_math, grade.total g_total, student.id s_id, student.name s_name FROM tbGrades AS grade INNER JOIN tbStudents AS student ON student.id = grade.student";

try {
    $db = new db();
    $db = $db->connect();
    $stmt = $db->prepare($sql);

    $stmt->execute();

    $grade = $stmt->fetchAll(PDO::FETCH_OBJ);

    $db = null;

    if(empty($grade)) {
        $response->getBody()->write
        ('
        {
            "error":
            {
                "status":"400",
                "message":"Invalid Request"
            }
        }');
    } else {
         foreach($grade as $value) {
            $array_resp[]=[
                'id' => $value->g_id,
                'student1' => ['id'=>$value->s_id, 'name'=>$value->s_name, 'bio'=>$value->g_bio, 'chem'=>$value->g_chem, 'math'=>$value->g_math, 'total grades'=>$value->g_total],
             ];
        }
        $response->getBody()->write(json_encode($array_resp));
    }
} catch(PDOException $e) {
    $response->getBody()->write
    ('
    {
        "error":
        {
            "message":'. $e->getMessage() .'
        }
    }');
}

【问题讨论】:

  • 你的桌子设计有缺陷。标准化成绩表可能有 5 列,其中之一是 subject
  • 同意@Strawberry,如果这是学习的话,很好,但如果长期发展为final,现在修复你的表格结构,否则你以后会讨厌自己。
  • 你能告诉我表格结构应该是怎样的吗?

标签: php mysql arrays json


【解决方案1】:

您可以使用 MySQL GROUP BY 子句轻松完成。

SELECT 
grade.id g_id, 
grade.semester g_semester, 
SUM(grade.bio) g_bio, 
SUM(grade.chem) g_chem, 
SUM(grade.math) g_math, 
SUM(grade.total) g_total, 
student.id s_id, 
student.name s_name
FROM 
tbGrades AS grade 
INNER JOIN 
tbStudents AS student 
ON 
student.id = grade.student
GROUP BY
student.id, 
grade.semester

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多