Sql中聚合函数的使用问题

因为知道Sql中聚合函数用在子查询中是允许的所以我这样写了一段代码

 select Sno,Cno 
    from SC 
    where SC.Grade>(select AVG(SC.Grade) 
                                from SC X,SC y
                                    where x.Sno=y.Sno) 

结果显示聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

当我改为

 SELECT Sno, Cno
    FROM    SC  x
    WHERE Grade >=(SELECT AVG(Grade)
                                FROM  SC y
                                   WHERE y.Sno=x.Sno)

时就能通过

所以我想知道为什么第一段代码不能通过呢,他的聚合函数也是用在了子查询中

可以定义个变量接收 select AVG(SC.Grade) from SC X,SC y where x.Sno=y.Sno 的值,然后再查询。