
Лабораторная работа №3
.docxЗадание 1. Вывести ФИО студентов и посчитать среднюю успеваемость каждого студента (Case).
Код:
select s.studentid, s.firstname as "Имя", s.lastname as "Фамилия", s.middlename as "Отчество", round(AVG(IntGrade),2) as "Ср. оценка"
from (select case grade
when 'Неудовлетворительно' then 2
when 'Удовлетворительно' then 3
when 'Хорошо' then 4
when 'Отлично' then 5
End as IntGrade,
studentid
from gradebook) as DigGrade inner join student s on s.studentid = DigGrade.studentid
group by s.studentid, s.firstname, s.lastname, s.middlename
Задание 2. Вывести ФИО студентов с наилучшей средней оценкой и значение средней оценки (Сделать 2я способами без/c конструкцией With).
Конструкция без with
Код:
select AvgGradeTab.studentid, s.lastname, s.firstname, s.middlename, round(AVG(IntGrade),2)
from (select case grade
when 'Неудовлетворительно' then 2
when 'Удовлетворительно' then 3
when 'Хорошо' then 4
when 'Отлично' then 5
End as IntGrade,
studentid
from gradebook) as AvgGradeTab inner join student s on AvgGradeTab.studentid = s.studentid
group by AvgGradeTab.studentid, s.lastname, s.firstname, s.middlename
having round(AVG(IntGrade),2) = (select max(AvgGradeTab.RoundGrade)
from (select studentid, round(AVG(IntGrade),2) as RoundGrade
from (select case grade
when 'Неудовлетворительно' then 2
when 'Удовлетворительно' then 3
when 'Хорошо' then 4
when 'Отлично' then 5
End as IntGrade,
studentid
from gradebook) as AvgGradeTab
group by studentid) as AvgGradeTab)
Конструкция с with
Код:
with DigitGradeTab as (select case grade
when 'Неудовлетворительно' then 2
when 'Удовлетворительно' then 3
when 'Хорошо' then 4
when 'Отлично' then 5
End as DigitGrade, studentid
from gradebook),
AvgGradeTab as (select studentid, round(AVG(DigitGrade), 2) as RoundGrade
from DigitGradeTab
group by studentid),
MaxAvgGradeTab as (select max(RoundGrade) as MaxGrade
from AvgGradeTab)
select s.studentid, s.lastname, s.firstname, s.middlename, RoundGrade
from AvgGradeTab inner join student s on AvgGradeTab.studentid = s.studentid
where RoundGrade = (select MaxGrade from MaxAvgGradeTab)
group by s.studentid, RoundGrade