2012-12-29 53 views
1

我有兩個表;一個包含學生namessids,另一個是包含sids of students及其grades的「take」表。比較mysql中的平均值

我想顯示平均比學生姓名「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

我想,''阿里Demir''是彼得·帕克的綽號?我以爲是蜘蛛俠。 –

+0

爲什麼在MySQL中使用'with'語法?它不支持CTE。 –

回答

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