Проблемы с агрегатной функцией суммы SQL - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь выполнить запрос к базе данных, которая имеет 3 таблицы: COURSE, SECTION, ENROLL.

Они создаются так:

create table COURSE
(
    Cno     varchar(9) primary key, 
    Cname   varchar(50),
    Credit  int check (Credit > 0)
);

create table SECTION
(
    Cno     varchar(9) REFERENCES COURSE(cno),
    Sno     varchar(9),
    Semester    varchar(15) check(Semester in('Fall','Spring','Summer')), 
    Year    int, 
    Sid     varchar(9) primary key 
);

create table ENROLL
(
    Mno     varchar(9) REFERENCES STUDENT(Mno),
    Sid     varchar(9) REFERENCES SECTION(Sid),
    Grade   CHAR check(Grade in('A','B','C','D','F')),
    primary key(Mno,Sid)
);

Я пытаюсьвыполнить SUM для всех кредитов для классов, в которые зачислен учащийся. Вот как я пытаюсь это сделать:

select 
    SUM(select Credit 
        from COURSE c 
        where c.Cno = (select s.Cno 
                       from SECTION s 
                       where s.Sid = (select Sid 
                                      from ENROLL 
                                      where Mno = @mNum));

Однако я получаю сообщение об ошибке в Visual Studio, чтоговорит

Неверный синтаксис рядом с 'select' (второй оператор выбора)

Что это не так?Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

попробуйте это:

select SUM((select Credit from COURSE c where c.Cno = 
(select s.Cno from SECTION s where s.Sid = (select Sid from ENROLL where Mno = @mNum)));
0 голосов
/ 03 декабря 2018

Вам потребуется IN, а не =, если, например, Mno может зарегистрироваться в нескольких секциях

select sum(Credit) 
   from COURSE c 
  where c.Cno in (select s.Cno 
                    from SECTION s 
                   where s.Sid in (select Sid 
                                    from ENROLL where Mno = @mNum)
                  )
0 голосов
/ 03 декабря 2018

посмотрите, работает ли он:

select sum(Credit) from COURSE c where c.Cno in 
(select s.Cno from SECTION s where s.Sid in (select Sid from ENROLL where Mno = @mNum)) 
group by c.Cno;
...