SQL多表查询平均分最低分

多表查询中查各系课程平均分最低的学生,姓名,学号怎么查啊,刚学SQL这个真的轻轻的让我破防了

以下内容部分参考ChatGPT模型:


首先,需要联合多个表进行查询,根据问题描述可以得知需要联合学生表、课程表和成绩表。然后,需要根据各系课程的平均分来进行排序,找到平均分最低的学生。最后,需要查询出该学生的姓名和学号。下面是一个可能的解决思路:

  1. 使用INNER JOIN联合学生表、课程表和成绩表,根据学号和课程号进行关联。
  2. 使用GROUP BY将结果按照系号和课程号进行分组,求出每个系每门课程的平均分。
  3. 使用ORDER BY按照平均分进行排序,找到平均分最低的学生所在的系和课程。
  4. 使用子查询或者嵌套查询,查询该系该门课程平均分最低的学生的姓名和学号。

下面是一个可能的SQL语句示例:

SELECT s.name, s.student_id
FROM student s
INNER JOIN score sc ON s.student_id = sc.student_id
INNER JOIN course c ON sc.course_id = c.course_id
WHERE c.department = (
  SELECT c2.department
  FROM score sc2
  INNER JOIN course c2 ON sc2.course_id = c2.course_id
  GROUP BY c2.department, c2.course_id
  HAVING AVG(sc2.score) = (
    SELECT MIN(avg_score)
    FROM (
      SELECT AVG(sc3.score) AS avg_score
      FROM score sc3
      INNER JOIN course c3 ON sc3.course_id = c3.course_id
      GROUP BY c3.department, c3.course_id
    ) t
  )
) AND c.course_id = (
  SELECT c2.course_id
  FROM score sc2
  INNER JOIN course c2 ON sc2.course_id = c2.course_id
  WHERE c2.department = (
    SELECT c3.department
    FROM score sc3
    INNER JOIN course c3 ON sc3.course_id = c3.course_id
    GROUP BY c3.department, c3.course_id
    HAVING AVG(sc3.score) = (
      SELECT MIN(avg_score)
      FROM (
        SELECT AVG(sc4.score) AS avg_score
        FROM score sc4
        INNER JOIN course c4 ON sc4.course_id = c4.course_id
        GROUP BY c4.department, c4.course_id
      ) t
    )
  )
  GROUP BY c2.course_id
  HAVING AVG(sc2.score) = (
    SELECT MIN(avg_score)
    FROM (
      SELECT AVG(sc3.score) AS avg_score
      FROM score sc3
      INNER JOIN course c3 ON sc3.course_id = c3.course_id
      WHERE c3.department = (
        SELECT c4.department
        FROM score sc4
        INNER JOIN course c4 ON sc4.course_id = c4.course_id
        GROUP BY c4.department, c4.course_id
        HAVING AVG(sc4.score) = (
          SELECT MIN(avg_score)
          FROM (
            SELECT AVG(sc5.score) AS avg_score
            FROM score sc5
            INNER JOIN course c5 ON sc5.course_id = c5.course_id
            GROUP BY c5.department, c5.course_id
          ) t
        )
      )
      GROUP BY c3.department, c3.course_id
    ) t2
  )
)
GROUP BY s.name, s.student_id

需要注意的是,上面的SQL语句可能比较冗长,也比较复杂,其中包含多个嵌套查询和子查询,不太容易理解和维护。如果能够使用视图或者临时表来简化查询,就更好了。另外,也可以根据实际情况进行适当的优化,比如添加索引、避免重复计算等。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

你没有给出表的结构,这没办法回答你的

平均分最低的,那肯定用分组,group by ,avg求平均数,其他的无非就是关联一下表