Мне дали таблицу данных студентов, и я должен написать запрос для следующего:
Найдите имя самого молодого студента (-ов) факультета «Информатика» вместе с общими оценками по всем предметам, полученным им (ими).
Схема базы данных следующая:
depts(
deptcode char(3) primary key,
deptname char(70) not null);
students(
rollno number(2) primary key,
name varchar(50),
bdate date check(bdate < TO_DATE('2004-01-01','YYYY-MM-DD')),
deptcode char(3) references depts(deptcode)
on delete cascade,
hostel number check(hostel<20),
parent_inc number(8,1));
crs_regd(
crs_rollno number(2) references students(rollno) on delete cascade,
on delete cascade,
marks number(5,2),
primary key(crs_rollno));
Я написал запрос как
select s.name, s.bdate, sum(c.marks) as marks from students s
inner join crs_regd c
on s.rollno=c.crs_rollno
inner join (
select st.name, min(st.bdate) as bdate from students st, depts d
where st.deptcode=d.deptcode and d.deptname='Computer Science and Technology' group by st.name) x
on x.name=s.name and x.bdate=s.bdate group by s.name,s.bdate;
Полученный результат:
JOSH MARTIN 14-JUN-99 274
GARY LEWIS 30-JUN-99 90
SUSANE SHAW 26-JAN-99 185
(где каждый столбец представляет оценки, полученные по разному предмету, все относятся к отделу «Компьютерные науки»)
Ожидаемый результат
SUSANE SHAW 26-JAN-99 185
Где я ошибаюсь? Если я ошибаюсь, сообщите об этом. Если требуется какая-либо другая информация, оставьте комментарий ниже. Если есть другой способ написать этот запрос, пожалуйста, обсудите.
JOIN
синтаксис. Легче писать (без ошибок), легче читать (и поддерживать) и при необходимости проще преобразовать во внешнее соединение 04.09.2019