
Лабораторная работа №4
.docxЗадание 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