我有两张桌子;一个包含学生names
和sids
,另一个包含sids of students
及其grades
的“获取”表。
我想要显示平均大于学生姓名“Peter-Parker”的学生的姓名。
我已经尝试过以下查询,但它不起作用。
SELECT s.sid, s.fname, s.lname
FROM student s, take t
WHERE s.sid = t.sid AND AVG(t.grade) > ALL(
SELECT AVG(grade)
FROM take, student
WHERE student.fname = 'Ali' and student.lname='Demir');
WITH AliAv(avg) AS
(SELECT AVG(grade) from take t, student s
where t.sid = s.sid ands.fname = 'Ali' and s.lname = 'Demir')
select student.sid, student.fname, student.lname
from student, take
where student.sid = take.sid Group by student.sid
having avg(take.grade) > AliAv.av;
答案 0 :(得分:1)
SELECT s.sid, s.fname, s.lname, AVG(t.grade) AS average
FROM student AS s
JOIN take AS t ON t.sid = s.sid
GROUP BY s.sid
HAVING average > (
SELECT AVG(t2.grade)
FROM student AS s2
JOIN take AS t2 ON t2.sid = s2.sid
WHERE s2.fname = 'Peter' and s2.lname = 'Parker'
)
答案 1 :(得分:0)
这适用于SQL Server,我不知道MySQL中的语法是否有效:
SELECT *
FROM Student s
WHERE
(SELECT AVG(Grade) FROM Take WHERE SID=s.ID) > (SELECT AVG(Grade) FROM Take WHERE SID = (SELECT SID FROM Student WHERE FName='Peter' AND LName='Parker'))