我有两个表,一个表示学生的成绩,另一个表示学生的信息,这两个表通过属性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;`
以及具有特定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
子句中放入另一个子查询则不起作用!我认为内部查询可以工作,但我不知道怎么写它。
答案 0 :(得分: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');
答案 1 :(得分: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'
)
答案 2 :(得分: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';
);