不使用聚合编写SQL

时间:2012-04-03 06:50:25

标签: sql aggregation

我正在尝试db-class.org视频的一些练习。有一个问题是找到

  

申请大学并选择的所有学生的最低gpa   CS作为主要的'

使用聚合,这是;

select min(gpa) from student,apply where student.sid=apply.sid and major='CS';

结果将是

min 
-----
 3.4
(1 row)

sid,gpa是表Student,而Apply表有字段sid,major

如何在不使用聚合的情况下重写此内容?

我试过

select gpa from student,apply  where major='CS' and   gpa < all(select gpa from student,apply where student.sid=apply.sid and major='CS');

但是这给了我14行而不是正确的结果 gpa

-----
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
 2.9
(14 rows)

为什么会这样?有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

尝试重用您的查询,我认为您错过了对学生的加入并申请了外部查询。另外我认为您应该使用<=而不是<。另请注意,了解您的DBMS会有所帮助。

select gpa from student, apply
where major='CS' and student.sid = apply.sid and gpa <= all (
    select gpa from student, apply
    where student.sid = apply.sid and major='CS'
)

答案 1 :(得分:0)

select top 1 gpa 
from student, apply 
where student.sid = apply.sid and major='CS'
order by gpa;

答案 2 :(得分:0)

select gpa from student,apply 
where student.sid=apply.sid and major='CS'
order by gpa limit 1