如何解决有关SQL和AVG函数中的相关子查询的问题
我们需要查询数据库,以获取分数大于其所读大学的平均分数的学生。现在,在手册中,它与GROUP BY子句一起使用,但我不明白为什么如果大学已经在内部查询的WHERE条件中分组,那么这里根本就不需要一个。有人可以说明一下这件事吗?
SELECT snum,stu_name,uni_name,points
FROM Students
INNER JOIN Applications a1 USING (snum)
WHERE points > (SELECT AVG(points)
FROM Students
INNER JOIN Applications a2 USING (snum)
WHERE a2.uni_name = a1.uni_name
GROUP BY uni_name);
解决方法
不需要GROUP BY
,我不建议您使用它。只需使用:
SELECT s.snum,s.stu_name,a.uni_name,points
FROM Students s INNER JOIN
Applications a USING (snum)
WHERE points > (SELECT AVG(points)
FROM Students s2 INNER JOIN
Applications a2
USING (snum)
WHERE a2.uni_name = a.uni_name
);
在这种情况下,两者是等效的。但是,如果您输入有误,则使用GROUP BY
可以返回多行-查询会导致错误。
我还建议您限定所有 all 列名,并为所有表赋予有意义的别名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。