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

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

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

Задание 1. Для каждого преподавателя посчитать сколько он поставил оценок "неудовлетворительно" по каждому из своих предметов. Вывести ФИО преподавателя, название предмета и кол-во оценок.

Код:

With CaseGrade as

(Select teacherid, case grade

When 'Неудовлетворительно' then 1

else 0

End as Graded

From Gradebook),

HowMany as

(Select teacherid, SUM(Graded) as CountGrade

From CaseGrade

Group by teacherid

Order by teacherid),

Miy as

(Select tch.lastname, tch.firstname, tch.middlename, sb.name, nt.CountGrade

From HowMany nt inner join Teacher tch on nt.teacherid = tch.teacherid

inner join Subject sb on tch.teacherid = sb.subjectid

Group by tch.lastname, tch.firstname, tch.middlename, sb.name, nt.CountGrade, tch.teacherid

Order by tch.teacherid)

Select *From Miy

Задание 2. Вывести всех студентов и для каждого студента назначить стипендию.

Если средняя оценка студента по всем предметам >= 4.8, тогда назначить стипендию 5500

Если средняя оценка студента по всем предметам >= 4 и < 4.8 , тогда назначить стипендию 2600

В противном случае назначить стипендию 0.

Код:

With Perevod as

(Select Studentid ,case Grade

when 'Неудовлетворительно' then 2

when 'Удовлетворительно' then 3

when 'Хорошо' then 4

when 'Отлично' then 5

End as GradeSbor

From Gradebook),

NormTab as

(Select pd.Studentid, stu.lastname, stu.firstname, stu.middlename, Round(AVG(pd.GradeSbor),2) as ogogo

From Perevod pd join Student stu on pd.Studentid = stu.Studentid

Group by pd.Studentid, stu.lastname, stu.firstname, stu.middlename

Order by pd.Studentid),

Molodci as

(Select Studentid, case

When ogogo >= 4.8 then 5500

When ogogo >= 4 and ogogo <= 4.8 then 2600

When ogogo <= 4 then 0

End as Stipend

From NormTab),

Gotovo as

(Select lastname, firstname, middlename, MM.Stipend

From Molodci MM join Student stu on Mm.Studentid = stu.Studentid

Group by stu.lastname, stu.firstname, stu.middlename, MM.stipend, stu.Studentid

Order by stu.Studentid)

Select *

From Gotovo

Задание 3. Для каждого ФИО преподавателя и его предмета вывести ФИО студентов и их среднюю оценку, котрые имеют наилучшую успеваемость по этому предмету

Код:

With Graded as

(Select gb.Studentid, sb.name as Named,

case Grade

when 'Неудовлетворительно' then 2

when 'Удовлетворительно' then 3

when 'Хорошо' then 4

when 'Отлично' then 5

End as GradeSbor

From Gradebook gb join subject sb on gb.subjectid = sb.subjectid),

BestGradePerSubject as

(Select Named, Max(AvgGrade) as MaxAvgGrade

From

(Select named, Round(Avg(GradeSbor), 0) as AvgGrade

From Graded

Group by studentid, named) Temp

Group by named)

Select t.lastname, t.firstname, t.middlename, GradedAvg.Named, GradedAvg.AvgGrade

From(

Select g.Studentid, g.Named, Round(Avg(g.GradeSbor), 0) as AvgGrade

From Graded g

Group by g.Studentid, g.Named) GradedAvg

join BestGradePerSubject bgs on GradedAvg.Named = bgs.Named and GradedAvg.AvgGrade = bgs.MaxAvgGrade

join Teacher t on t.teacherid = (SELECT SubjectId From Subject Where name = GradedAvg.Named)

Order by GradedAvg.Named