· 7 years ago · Dec 20, 2018, 11:10 PM
1use lab4
2
3-- edit data
4exec sp_rename 'dbo.ЛиÑÑ‚1$', 'Students'
5exec sp_rename 'dbo.ЛиÑÑ‚2$', 'Subjects'
6exec sp_rename 'dbo.ЛиÑÑ‚3$', 'Results'
7
8exec sp_rename 'Students.Ðомер', 'id', 'COLUMN'
9exec sp_rename 'Students.УчаÑтник', 'name', 'COLUMN'
10
11exec sp_rename 'Subjects.Ðомер', 'id', 'COLUMN'
12exec sp_rename 'Subjects.ДиÑциплина', 'name', 'COLUMN'
13
14exec sp_rename 'Results.Ðомер учаÑтника', 'student_id', 'COLUMN'
15exec sp_rename 'Results.ДиÑциплина', 'subject_id', 'COLUMN'
16exec sp_rename 'Results.Баллы', 'points', 'COLUMN'
17
18alter table Subjects drop column F3
19alter table Subjects drop column F4
20alter table Subjects drop column F5
21
22alter table Students alter column id int not null
23alter table Students add constraint pk_students_id primary key (id)
24
25alter table Subjects alter column id int not null
26alter table Subjects add constraint pk_subjects_id primary key (id)
27
28alter table Results alter column student_id int not null
29alter table Results alter column subject_id int not null
30alter table Results add constraint pk_results primary key (student_id, subject_id)
31
32select * from Students;
33select * from Subjects;
34select * from Results;
35
36-- Сколько учаÑтников теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ð»Ð¸ по руÑÑкому Ñзыку, физике и математике в Ñумме более 200 баллов?
37
38drop function if exists GetStudentsCount;
39
40go
41create function GetStudentsCount(@subject1 NVARCHAR(255), @subject2 NVARCHAR(255), @subject3 NVARCHAR(255), @sum int)
42returns int
43as
44begin
45 declare @res int;
46 select @res = count(*) from (
47 select sum(r.points) as s
48 from Results as r
49 join Subjects as sub on r.subject_id = sub.id
50 where sub.name = @subject1 or
51 sub.name = @subject2 or
52 sub.name = @subject3
53 group by r.student_id
54 having sum(r.points) > @sum
55 ) as res;
56 return @res;
57end;
58go
59
60print dbo.GetStudentsCount('руÑÑкий Ñзык', 'математика', 'физика', 200);
61
62
63
64-- Каков Ñредний балл по физике у учаÑтников, которые набрали по математике более 60 баллов?
65
66drop function if exists GetAveragePoints;
67
68go
69create function GetAveragePoints(@subject1 NVARCHAR(255), @subject2 NVARCHAR(255), @point_limit int)
70returns float
71as
72begin
73 declare @res float;
74
75 select @res = avg(points) from Results as r
76 join Subjects as sub on r.subject_id = sub.id
77 where sub.name = @subject1
78 and r.student_id in
79 (select r.student_id from Results as r
80 join Subjects as sub on r.subject_id = sub.id
81 where sub.name = @subject2
82 and r.points > @point_limit);
83
84 return @res;
85end;
86go
87
88print dbo.GetAveragePoints('физика', 'математика', 60);
89
90select avg(points) from Results as r
91join Subjects as sub on r.subject_id = sub.id
92where sub.name = 'физика'
93 and r.student_id in
94 (select r.student_id from Results as r
95 join Subjects as sub on r.subject_id = sub.id
96 where sub.name = 'математика'
97 and r.points > 60);
98
99
100-- СпиÑок учаÑтников, получивших Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ по двум диÑциплинам более 70 баллов, Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ð¼Ð¸ «УчаÑтник», «ДиÑциплины, по которым более 70 баллов».