我需要编写一个SQL查询,显示学生平均大于55的课程名称
表格:学生,学分,课程,部门
我做了什么 :
SQL> SELECT COURSE_NAME
2 FROM COURSES
3 where
4 (select avg(grade)
5 from grades,courses
6 where
7 grades.course_id=courses.course_id)>55;
Run Code Online (Sandbox Code Playgroud)
结果很糟糕!(它显示所有课程)
表格:
create table DEPARTMENTS
(
DEPARTMENT_ID char(2),
NAME varchar2(20),
HEAD varchar2(20));
create table COURSES
(
COURSE_ID char(10),
COURSE_NAME varchar2(20),
TYPE char(6),
POINTS number(2),
DEPARTMENT_ID char(2));
create table GRADES
(
STUDENT_ID number(3),
COURSE_ID char(10),
SEMESTER varchar2(10),
TERM char(1),
GRADE number(3),
GRADE_SEM number(3));
create table STUDENTS
(
STUDENT_ID number(3),
NAME char(15),
CITY char(15));
Run Code Online (Sandbox Code Playgroud)
您的查询COURSES根据子查询是返回多于55还是小于55 返回每条记录或没有记录,因为外部查询以任何方式与子查询无关.您想要JOIN表格,GROUP BY课程名称,并使用HAVING子句来过滤:
SELECT c.course_name
FROM grades g
JOIN courses c
ON g.course_id = c.course_id
GROUP BY c.course_name
HAVING AVG(grade) > 55
Run Code Online (Sandbox Code Playgroud)