Я использую статистическую функцию для расчета среднего балла для конкретного студента.У меня есть три таблицы: КУРС, РАЗДЕЛ и ЗАПИСЬ.Эти таблицы созданы следующим образом:
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)
);
Я должен преобразовать Grade char в таблице ENROLL в значение с плавающей запятой.Способ расчета GPA в моем случае:
SUM(grade of each course*credit hours of the course)/SUM(credit hours of each course)
Вот как я сейчас пытаюсь вычислить GPA:
@grade =
(
(select SUM(CASE
WHEN Grade = 'A' THEN 4.0
WHEN Grade = 'B' THEN 3.0
WHEN Grade = 'C' THEN 2.0
WHEN Grade = 'D' THEN 1.0
WHEN Grade = 'F' THEN 0.0
END
* (
select c.Credit from COURSE c where c.Cno = (
select s.Cno from SECTION s where s.Sid in (
select Sid from ENROLL where Mno = @mNum
)
)
)
) FROM ENROLL
where Mno = @mNum
) / (
select SUM(Credit) from COURSE c where c.Cno = (
select s.Cno from SECTION s where s.Sid in (
select Sid from ENROLL where Mno = @mNum
)
) group by c.Cno
)
)
Однако существует очевидная проблема.Вы не можете иметь подзапрос внутри агрегатной функции, поэтому я был в тупике, пытаясь найти альтернативу.Любая помощь будет принята с благодарностью.