多表查询中查各系课程平均分最低的学生,姓名,学号怎么查啊,刚学SQL这个真的轻轻的让我破防了
首先,需要联合多个表进行查询,根据问题描述可以得知需要联合学生表、课程表和成绩表。然后,需要根据各系课程的平均分来进行排序,找到平均分最低的学生。最后,需要查询出该学生的姓名和学号。下面是一个可能的解决思路:
下面是一个可能的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求平均数,其他的无非就是关联一下表