написание sql без использования агрегации - PullRequest
1 голос
/ 03 апреля 2012

Я пробовал некоторые упражнения из видео 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 ]

2 голосов
/ 03 апреля 2012

Пытаясь повторно использовать ваш запрос, я думаю, что вы пропустили соединение со студентом и подали заявку на внешний запрос.Также я думаю, что вы должны использовать <= вместо <.Также обратите внимание, что знание вашей СУБД поможет.

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'
)
0 голосов
/ 03 апреля 2012
select gpa from student,apply 
where student.sid=apply.sid and major='CS'
order by gpa limit 1
0 голосов
/ 03 апреля 2012
select top 1 gpa 
from student, apply 
where student.sid = apply.sid and major='CS'
order by gpa;
...