Arhn - архитектура программирования

Написание sql-запроса имени самого молодого студента (-ов) факультета «Информатика» вместе с общими оценками, полученными им (ими) ».

Мне дали таблицу данных студентов, и я должен написать запрос для следующего:

Найдите имя самого молодого студента (-ов) факультета «Информатика» вместе с общими оценками по всем предметам, полученным им (ими). ​​

Схема базы данных следующая:

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

Где я ошибаюсь? Если я ошибаюсь, сообщите об этом. Если требуется какая-либо другая информация, оставьте комментарий ниже. Если есть другой способ написать этот запрос, пожалуйста, обсудите.

04.09.2019

  • Каков ожидаемый результат, если у ГЭРИ ЛЬЮИСа такая же дата рождения, как у СЮЗЕЙН ШОУ? 04.09.2019
  • @jarlh В этом случае должны отображаться обе записи. 04.09.2019
  • Я думаю, вам нужно ЗАКАЗАТЬ bdate ASC и установить LIMIT 1. 04.09.2019
  • @FredrikStigsson вернет только 1 пользователя, даже если есть несколько пользователей с одним и тем же самым последним днем ​​рождения. Переключитесь на современный FETCH FIRST 1 ROW WITH TIES, чтобы получить их все. 04.09.2019
  • В вопросах кода дайте минимальный воспроизводимый пример - вырезать и вставить & запускаемый код; пример ввода (в виде табличного кода инициализации) с желаемым и фактическим выводом (включая дословные сообщения об ошибках); теги и версии; четкая спецификация и объяснение. Это включает в себя наименьшее количество кода, который вы можете указать, это код, который вы показываете как ОК, расширенный кодом, который вы показываете, как неправильный. (Основы отладки.) PS Сосредоточьтесь на этой ошибке и задайте свою общую цель позже в новом посте, если вы все еще застряли. 04.09.2019
  • Ваша основная цель - это ответы на часто задаваемые вопросы. Прежде чем рассматривать возможность публикации, всегда просьба гуглить любое сообщение об ошибке и множество четких, кратких и точных формулировок вашего вопроса / проблемы / цели, с указанием и без ваших конкретных строк, имен и номеров строк, а также с и без «site: stackoverflow.com» и прочтите много хиты и ответы. Если вы публикуете вопрос, используйте одну фразу в качестве заголовка. См. Как задать вопрос и тексты при наведении курсора мыши на стрелку голосования. 04.09.2019

Ответы:


1

group by в подзапросе неверен.
ИЗМЕНИТЬ. Поскольку я согласен с комментарием об использовании join, я переписал запрос

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 MIN(st.bdate) AS bdate
            FROM students st
                    INNER JOIN depts d ON st.deptcode=d.deptcode
            WHERE d.deptname='Computer Science and Technology'
        ) x ON x.bdate = s.bdate
GROUP BY s.name, s.bdate;

Написанный вами подзапрос возвращает минимальную дату рождения для каждого студента вместо минимальной даты рождения для всего факультета.

04.09.2019
  • Совет сегодня: всегда используйте современный явный JOIN синтаксис. Легче писать (без ошибок), легче читать (и поддерживать) и при необходимости проще преобразовать во внешнее соединение 04.09.2019

  • 2

    Вы можете попробовать ниже -

    select s.name, s.bdate, sum(c.marks) as marks from students s
    inner join crs_regd c on s.rollno=c.crs_rollno
    where s.bdate in 
    (select min(st.bdate) as bdate from students st inner join depts d
    on st.deptcode=d.deptcode and d.deptname='Computer Science and Technology')
    group by s.name, s.bdate;
    
    04.09.2019
  • Предложение group by здесь отсутствует для достижения sum(c.marks) 04.09.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..