SQL查询中的结果不好

时间:2014-01-09 21:46:34

标签: sql

我需要编写一个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));

3 个答案:

答案 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

首先尝试运行该查询。您应该看到它返回一个数字。但这个号码没有任何其他内容。所以除了返回所有课程外,外部查询不能对它做任何事情。