2

我有两张表,一张表示学生的成绩,另一张表示学生的信息,这两张表通过属性STUDENTS.ST_IDGRADES.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;`

以及具有特定 STUDENTS.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不起作用!我认为内部查询可以工作,但我不知道如何编写它。

4

3 回答 3

4

像这样应该可以;

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');
于 2013-09-19T14:53:56.177 回答
3

你几乎只是把这两个放在一起,

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'
     )

;

于 2013-09-19T14:53:46.497 回答
1

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

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';
);
于 2013-09-19T15:04:33.317 回答