Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关于HAVING子句don'的子查询;不行?_Sql_Database_Oracle - Fatal编程技术网

Sql 关于HAVING子句don'的子查询;不行?

Sql 关于HAVING子句don'的子查询;不行?,sql,database,oracle,Sql,Database,Oracle,我有两个表,一个是指学生的成绩,另一个是指学生的信息,这两个表通过属性students.ST_ID和GRADES.G_students连接起来。查询要求我检索其平均分数高于具有特定students.ST_ID_NUM的学生的平均分数的所有学生(矩阵的另一个属性)。我可以检索所有学生的平均分数,如下所示: SELECT STUDENTS.ST_NAME, STUDENTS.ST_SURNAME, AVG(GRADES.G_GRADE) FROM STUDENTS INNER JOIN GRAD

我有两个表,一个是指学生的成绩,另一个是指学生的信息,这两个表通过属性
students.ST_ID
GRADES.G_students
连接起来。查询要求我检索其平均分数高于具有特定
students.ST_ID_NUM
的学生的平均分数的所有学生(矩阵的另一个属性)。我可以检索所有学生的平均分数,如下所示:

SELECT STUDENTS.ST_NAME, STUDENTS.ST_SURNAME, AVG(GRADES.G_GRADE)  
FROM STUDENTS INNER JOIN GRADES  
ON STUDENTS.ST_ID = GRADES.G_STUDENT  
GROUP BY STUDENTS.ST_NAME, STUDENTS.ST_SURNAME;`
和特定学生的平均分数。ST_ID_NUM`:

select avg(grades.g_grade)   
from students inner join grades  
on students.st_id = grades.g_student  
where students.st_id_num = '061RDB121';

如何在第一个查询中设置条件?如果我在
HAVING
子句中放入另一个子查询,则该子查询不起作用!我认为内部查询可以工作,但我不知道如何编写它。

您几乎只是将这两个查询组合在一起

SELECT STUDENTS.ST_NAME, STUDENTS.ST_SURNAME, AVG(GRADES.G_GRADE)
FROM STUDENTS INNER JOIN GRADES
ON STUDENTS.ST_ID = GRADES.G_STUDENT
GROUP BY STUDENTS.ST_NAME, STUDENTS.ST_SURNAME
HAVING AVG(GRADES.G_GRADE)>
    (
    select avg(grades.g_grade)
    from students inner join grades
    on students.st_id = grades.g_student
    where students.st_id_num = '061RDB121'
     )
)

这样应该行得通

SELECT STUDENTS.ST_NAME, STUDENTS.ST_SURNAME, AVG(GRADES.G_GRADE)
FROM STUDENTS INNER JOIN GRADES
ON STUDENTS.ST_ID = GRADES.G_STUDENT
GROUP BY STUDENTS.ST_NAME, STUDENTS.ST_SURNAME;
having  AVG(GRADES.G_GRADE) > (select avg(grades.g_grade)
                                          from students inner join grades
                                            on students.st_id = grades.g_student
                                            where students.st_id_num = '061RDB121');

您是否尝试将两个查询结合使用

SELECT STUDENTS.ST_NAME, STUDENTS.ST_SURNAME, AVG(GRADES.G_GRADE)
FROM STUDENTS INNER JOIN GRADES
ON STUDENTS.ST_ID = GRADES.G_STUDENT
GROUP BY STUDENTS.ST_NAME, STUDENTS.ST_SURNAME
HAVING AVG(GRADES.G_GRADE) > (
    select avg(grades.g_grade)
    from students inner join grades
    on students.st_id = grades.g_student
    where students.st_id_num = '061RDB121';
);

向我们展示不起作用的
查询,并告诉我们错误消息是什么。我想这就是OP试图说的不起作用的原因。。。请注意,医生说它无论如何都应该是=)好的,现在可以了,真的,我在问这个问题之前已经试过这个解决方案了。生命的迷雾:/