【问题标题】:SQL select average grade for studentsSQL选择学生的平均成绩
【发布时间】:2015-08-14 20:44:03
【问题描述】:

我正在学习 sql,但遇到了一些麻烦, 我需要每个学生在每个科目上的平均成绩。

我做了以下表格。

students
|id_student|name|

subjects
|id_subject|name|

grades
|id_grade|value|

我使用这些表格链接它们:

students_subjects
|id_student|id_subject|

subjects_grades
|id_subject|id_grade|

students_grades
|id_student|id_grade|

任何帮助表示赞赏

我在努力

SELECT students.name, subjects.name, grades.value
FROM students
INNER JOIN students_subjects
ON students.id_student = students_subjects.id_student
INNER JOIN subjects
ON subjects.id_subject = students_subjects.id_subject
INNER JOIN students_grades
ON students_grades.id_student = students.id_student
INNER JOIN grades
ON students_grades.id_grade = grades.id_grade
INNER JOIN subjects_grades
ON grades.id_grade = subjects_grades.id_grade

我得到下表

|     name |    name | value |
|----------|---------|-------|
|     Nico |  class1 |    70 |
|     Nico |  class1 |    40 |
|     Nico |  class2 |    70 |
|     Nico |  class2 |    40 |
|    Fadia |  class1 |    60 |
|    Fadia |  class1 |    55 |
| Cristian |  class2 |    50 |
| Cristian |  class2 |    40 |

但是如果我做 AVG(grades.value) 我只会得到第一行

【问题讨论】:

  • 请向我们展示您的尝试。
  • 您能否澄清一下您是否想要每个学生或每个科目的平均成绩?
  • 每个学生每个科目的平均成绩。例如,对于一个学生,他们在主题 1、主题 2 等方面的平均水平。对于每个学生来说

标签: mysql average


【解决方案1】:

只需按以下方式添加组:

SELECT students.name, subjects.name, AVG(grades.value)
FROM students
    INNER JOIN students_subjects
    ON students.id_student = students_subjects.id_student
    INNER JOIN subjects
    ON subjects.id_subject = students_subjects.id_subject
    INNER JOIN students_grades
    ON students_grades.id_student = students.id_student
    INNER JOIN grades
    ON students_grades.id_grade = grades.id_grade
    INNER JOIN subjects_grades
    ON grades.id_grade = subjects_grades.id_grade
GROUP BY students.name, subjects.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多