假设你有两个表:一个学生表(student_209)和一个课程表(course_209)和一个选课表(sc_209)。 学生表包含学生的信息,包括学生的学号sno和姓名sname。 课程表包含课程的信息,包括课程编号cno,课程名称cname和学分credit,选课表,其中包含学生的选课信息,包括学生的学号sno,课程编号cno和分数grade。查询选修了1门且平均分在80分以下课程的学生的学号。
时间: 2023-06-12 12:03:55 浏览: 113
可以使用以下 SQL 查询语句来实现:
```
SELECT sc_209.sno
FROM sc_209
JOIN course_209 ON sc_209.cno = course_209.cno
GROUP BY sc_209.sno
HAVING COUNT(*) = 1 AND AVG(sc_209.grade) < 80;
```
这个查询语句使用了三个表的连接,首先将选课表(sc_209)和课程表(course_209)通过课程编号(cno)进行连接,然后根据学生学号(sno)进行分组,筛选出只选修了一门课程的学生,并计算他们的平均分数,最后筛选出平均分在80分以下的学生学号。
相关问题
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表
),请问如何查询选修课程为”数学”的学生及其成绩?
我可以通过 SQL 语言来实现查询。具体的语句如下:
SELECT student.s_name, sc.score
FROM student, sc, course
WHERE student.s_id = sc.s_id AND sc.c_id = course.c_id AND course.c_name = '数学';
这个语句的含义是:从 student、course、sc 三个表中,找到选修课程名为“数学”的学生和他们的成绩。其中,通过 WHERE 子句将三个表连接在一起,并且约束条件是 student 表中的学生 ID 等于 sc 表中的学生 ID,同时 sc 表中的课程 ID 等于 course 表中的课程 ID。最后,通过 SELECT 子句选择想要的结果,这里是学生姓名和成绩。
问题:给定两张表(学生课程成绩表,学生班级表),写出如下两个sql 学生课程成绩表:table_course_grade,包含字段:course_id course_name student_id student_name course_grade 学生班级表: table_class_student,包含字段:class_id class_name student_id student_name 1、写出sql,"计算学生数量,这些同学的总分大于150分,平均分小于90分"。 2、写出hivesql并解释,"列出各个班级的名称和总分值"。
答案:
1、计算学生数量,这些同学的总分大于150分,平均分小于90分的SQL语句:
```sql
SELECT COUNT(DISTINCT student_id)
FROM table_course_grade
GROUP BY student_id
HAVING SUM(course_grade) > 150 AND AVG(course_grade) < 90;
```
2、列出各个班级的名称和总分值的HiveSQL语句:
```sql
SELECT c.class_name, SUM(g.course_grade) as total_grade
FROM table_class_student c
JOIN table_course_grade g
ON c.student_id = g.student_id
GROUP BY c.class_name;
```
该语句使用了INNER JOIN将两个表连接起来,在GROUP BY语句中按照班级名称进行分组,并使用SUM函数计算每个班级的总分。最后,SELECT语句选择班级名称和总分作为输出结果。