关于#SQL#的问题,如何解决?

MYSQL库
student_Id 学生编号、student_name 学⽣姓名、student_age 出⽣年⽉、student_sex 学⽣性别 course_Id 课程编号、course_name 课程名称、teacher_Id 教师编号 teacher_Id 教师编号、teacher_name 教师姓名 student_Id 学⽣生编号、course_Id 课程编号、score 分数
1.查询存在两门及其以上不及格课程的同学的学号、姓名、不合格科目平均成绩 *注意必须用到HAVING 函数
2.查询与学生编号为" 11 "的学生有大于等于1门相同课程的学生信息,结果输出学生编号、学⽣姓名、 出⽣年⽉、学⽣性别、与学生编号为" 11 "的学生学习相同的课程名称 一个学生一行展示,多个课程内容可拼接展示

img

img

img

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
1、 查询存在两门及其以上不及格课程的同学的学号、姓名、不合格科目平均成绩

SELECT s.student_Id, s.student_name, AVG(sc.score) AS avg_score
FROM student s
JOIN score sc ON s.student_Id = sc.student_Id
WHERE sc.score < 60
GROUP BY s.student_Id, s.student_name
HAVING COUNT(*) >= 2

解释:首先使用INNER JOIN将学生表和成绩表连接起来,然后使用WHERE子句筛选出不及格的成绩记录,再使用GROUP BY子句对学生分组,HAVING子句筛选出存在两门及其以上不及格课程的学生,最后使用AVG函数计算不及格科目的平均成绩。

2、 查询与学生编号为"11"的学生有大于等于1门相同课程的学生信息,结果输出学生编号、学生姓名、出生年月、学生性别、与学生编号为"11"的学生学习相同的课程名称

SELECT s.student_Id, s.student_name, s.student_age, s.student_sex, GROUP_CONCAT(c.course_name SEPARATOR ',') AS course_name
FROM student s
JOIN score sc1 ON s.student_Id = sc1.student_Id
JOIN score sc2 ON sc1.course_Id = sc2.course_Id AND sc2.student_Id = '11'
JOIN course c ON sc1.course_Id = c.course_Id
WHERE s.student_Id <> '11' AND sc1.score >= 60
GROUP BY s.student_Id, s.student_name, s.student_age, s.student_sex
HAVING COUNT(DISTINCT sc1.course_Id) >= 1

解释:首先使用INNER JOIN将学生表和成绩表连接起来,并使用第一个JOIN子句筛选出与学生编号为"11"的学生学习相同课程的成绩记录,使用第二个JOIN子句将课程表连接起来,然后使用WHERE子句筛选出学号不为"11"且成绩及格的学生,最后使用GROUP BY子句对学生分组,HAVING子句筛选出学习相同课程数量大于等于1门的学生,使用GROUP_CONCAT函数将学生所学的课程名称拼接为一个字段。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢