SQL语句 使用连接查询 找出每个学生超过或等于他选修课程平均成绩的课程号 没有平均成绩表 有成绩表包含学号和成绩
时间: 2024-09-20 14:17:32 浏览: 70
在SQL中,如果你没有单独的平均成绩表,你需要通过子查询来计算每个学生的每门课程的平均成绩,并结合主表(成绩表)来找出满足条件的结果。假设你的成绩表名为`scores`,字段包括`student_id`(学号) 和 `course_id`(课程号),你可以尝试以下的SQL语句:
```sql
SELECT s.course_id
FROM scores AS s
JOIN (
SELECT student_id, course_id, AVG(score) AS avg_score
FROM scores
GROUP BY student_id, course_id
) AS avg_scores
ON s.student_id = avg_scores.student_id AND s.course_id = avg_scores.course_id
WHERE s.score >= avg_scores.avg_score;
```
这个查询首先对`scores`表按学生和课程分组并计算平均成绩,然后将这些平均成绩与原始成绩表连接,筛选出成绩大于等于平均成绩的学生的课程。
相关问题
使用sql语句 1.查询每名学生的学号、选修课程数目、其所选修的课程的期末成绩总和,并将查询结果生成一张“学生选课统计”表。 2.求出各年级(取出学号前2位left(studentno,2))各门课的期末平均成绩,并按期末平均成绩降序排列。 3.查询教师的基本信息和所讲授的课程号,要求其中包括未分配课程的教师信息。 4.查询讲授“C06108”号课程的所有教师信息。 5.查询各班级的平均期末成绩,并按照平均分降序排序。(连接和统计)。 6.查询两门及以上课程的期末成绩超过80分的学生的姓名及超过80分的课程数。 7.查询选修了“嵌入式系统”或“接口技术”课程的学生学号。 8.查询至少选修了“1806000003”学生选修的全部课程的学生学号。 9.查询没有被任何学生选修的课程的课程号、课程名称和学分。 10.查询学生的期末成绩比其本人选修的所有课程的期末平均成绩低的学生学号、课程号和期末成绩。
抱歉,我可以回答第一个问题。该问题属于SQL语句的基础知识,可以使用多个SELECT语句和GROUP BY语句来实现。以下是一个可能的解决方案:
1. SELECT studentno, COUNT(courseno) AS course_count, SUM(score) AS total_score
FROM score
GROUP BY studentno;
该SQL语句将从score表中获取每个学生的学号、所选课程的数目以及期末成绩的总和,并使用GROUP BY语句将其分组为每个学生一行。
SQL语句查询每个学生的学号、姓名、选修的课程号、课程名和成绩
可以使用如下的 SQL 语句来查询每个学生的学号、姓名、选修的课程号、课程名和成绩:
```
SELECT s.id AS 学号, s.name AS 姓名, c.id AS 课程号, c.name AS 课程名, sc.score AS 成绩
FROM student s
INNER JOIN score sc ON s.id = sc.stu_id
INNER JOIN course c ON sc.course_id = c.id;
```
其中,`student` 表存储了学生的信息,包括学号和姓名;`course` 表存储了课程的信息,包括课程号和课程名;`score` 表存储了学生选修的课程和对应的成绩,包括学生的学号、课程号和成绩。通过 `INNER JOIN` 连接这三个表,就可以查询到每个学生的学号、姓名、选修的课程号、课程名和成绩。
阅读全文