问题描述
我们需要查询数据库,以获取分数大于其所读大学的平均分数的学生。现在,在手册中,它与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 列名,并为所有表赋予有意义的别名。