Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3

.docx
Скачиваний:
0
Добавлен:
30.05.2024
Размер:
97.54 Кб
Скачать

Задание 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