我需要编写一个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;
结果很糟糕! (它显示所有课程)
表:
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));
答案 0 :(得分:5)
您的查询根据子查询是返回多于55还是小于55来返回COURSES
中的每条记录或没有记录,因为外部查询以任何方式与子查询无关。您希望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
答案 1 :(得分:-1)
尝试此查询:
select COURSE_NAME, avg(grade) from grades,courses where grades.course_id=courses.course_id
group by COURSE_NAME
having avg(grade) > 55
答案 2 :(得分:-1)
这是你的子查询:
选择平均(等级)
从成绩,课程
其中
grades.course_id = courses.course_id
首先尝试运行该查询。您应该看到它返回一个数字。但这个号码没有任何其他内容。所以除了返回所有课程外,外部查询不能对它做任何事情。