Лабораторные работы (А-13-07) / Авдиенков, Шутова / Отчет лаб 5
.docxМосковский Энергетический Институт
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №5
Выполнили: Авдиенков О.А.
Шутова Е.С.
Преподаватель :Сидорова Н.П.
2010
Задание 8
Выдать статистику по категориям обучения учащихся вашего государства только прием 1991 года. Отчет должен начинаться заголовком и цифрой - общим количеством записей по запросу (по приему 91-го года). Далее таблица, включающая перечень категорий обучения с цифрами, не равными нулю.
ALTER PROCEDURE GetCategoryOfStudingByYearOfEnterance
(
@Year CHAR(2)
)
AS
BEGIN
SELECT COUNT(nomer) AS 'Количество учащихся поступивших в заданном году'
FROM bel b
WHERE
b.gp=@Year
SELECT
ko.kat_obucheniya AS 'Категория'
,COUNT(b.nomer) AS 'Количество учащихся в данной категории'
FROM bel b
INNER JOIN kat_obuch ko ON (ko.cod=b.kat_obuch_k)
WHERE
b.gp=@Year
GROUP BY
ko.kat_obucheniya
END
GO
Задание 9
Выдать статистику по вашему государству по следующим специальностям: 0401 , 0402, 0403 и 0405 (общее число по каждой специальности), а также количества мужчин и женщин по каждой из этих специальностей. Отчет должен начинаться с соответствующего заголовка. Далее таблица из четырех строчек, где каждая строчка включает шифр специальности и 3 цифры: всего, количество мужчин и количество женщин.
CREATE PROCEDURE [dbo].[GetSpecialityStatsByGender]
AS
BEGIN
SELECT
TotalTable.spec AS 'Специальность'
, Total AS 'Общее количесвто'
, Woman AS 'Количество женщин'
, Man AS 'Количество мужчин'
FROM
(
SELECT spec , COUNT(spec) AS Total
FROM bel
WHERE nomer IN
(
SELECT nomer
FROM bel
WHERE spec IN ('000401' ,'000402' ,'000403' ,'000405')
)
GROUP BY spec
) AS TotalTable
INNER JOIN
(
SELECT spec , COUNT(spec) AS Man
FROM bel
WHERE nomer IN
(
SELECT nomer
FROM bel
WHERE spec IN ('000401' ,'000402' ,'000403' ,'000405')
AND pol = 'М'
)
GROUP BY spec
) AS ManTable ON (ManTable.spec = TotalTable.spec)
INNER JOIN
(
SELECT spec , COUNT(spec) AS Woman
FROM bel
WHERE
nomer IN
(
SELECT nomer
FROM bel
WHERE spec IN ('000401' ,'000402' ,'000403' ,'000405')
AND pol = 'Ж'
)
GROUP BY spec
) AS WomanTable ON (WomanTable.spec = TotalTable.spec)
END
Задание 10
Выдать статистику по семейному положению учащихся вашего государства, заканчивающих учебу в 1994 или в 1995 году. Отчет должен начинаться с соответствующего заголовка. Далее - две таблицы, где каждая таблица начинается с заголовка: ГОД ВЫПУСКА <год> - ВСЕГО <цифра> (не равная нулю), а заканчивается перечнем семейных положений с цифрами, не равными нулю.
ALTER PROCEDURE GetmaritalStatusStats
(
@Year1 CHAR(2)
,@Year2 CHAR(2)
)
AS
BEGIN
SELECT @Year1 AS 'Год окончаения'
,COUNT(nomer) AS 'Количество учащихся'
FROM bel b
WHERE
b.gok=@Year1
SELECT
f.family_status AS 'Семейное положение'
,COUNT(b.nomer) AS 'Количество учащихся'
FROM bel b
INNER JOIN family f ON (f.cod=b.sem_polog_k)
WHERE
b.gok=@Year1
GROUP BY
f.family_status
SELECT @Year2 AS 'Год окончаения'
,COUNT(nomer) AS 'Количество учащихся'
FROM bel b
WHERE
b.gok=@Year2
SELECT
f.family_status AS 'Семейное положение'
,COUNT(b.nomer) AS 'Количество учащихся'
FROM bel b
INNER JOIN family f ON (f.cod=b.sem_polog_k)
WHERE
b.gok=@Year2
GROUP BY
f.family_status
END
GO
Задание 11
Выдать статистику по городам вашего государства и только по студентам (исключая другие категории обучения). Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу (всего студентов). Далее таблица, включающая перечень городов с цифрами, не равными нулю.
CREATE PROCEDURE [dbo].[GetLocationStatsForStudents]
AS
BEGIN
SELECT COUNT(*) AS 'Общее количество студентов'
FROM bel b
INNER JOIN kat_obuch ko ON (ko.cod=b.kat_obuch_k)
WHERE
ko.kat_obucheniya like 'СТУДЕНТ%'
SELECT
vg.nazvanie_goroda AS 'Город'
,COUNT(*) AS 'Количество студентов'
FROM bel b
INNER JOIN kat_obuch ko ON (ko.cod=b.kat_obuch_k)
INNER JOIN vuz_gorod vg ON (vg.cod_vuza=b.vuz_k)
WHERE
ko.kat_obucheniya like 'СТУДЕНТ%'
GROUP BY
vg.nazvanie_goroda
END
Задание 12
Выдать статистику по учебным заведениям вашего государства, включая цифры по выпуску 1994 года. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень названий учебных заведений с двумя цифрами (у каждого учебного заведения): 1) всего по учебному заведению (не равная нулю); 2) выпуск 1994 года.
ALTER PROCEDURE [dbo].[GetLocationStatsForStudents]
(
@Year CHAR(2)
)
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся'
FROM bel
SELECT
TotalTable.nazvanie_vuza AS 'ВУЗ'
, Total AS 'Общее количество'
, SelectedYear AS 'Закончившие в указанном году'
FROM
(
SELECT vg.nazvanie_vuza , COUNT(*) AS Total
FROM bel b
INNER JOIN vuz_gorod vg ON(vg.cod_vuza=b.vuz_k)
GROUP BY vg.nazvanie_vuza
) AS TotalTable
INNER JOIN
(
SELECT vg.nazvanie_vuza , COUNT(*) AS SelectedYear
FROM bel
INNER JOIN vuz_gorod vg ON(vg.cod_vuza=bel.vuz_k)
WHERE
bel.gok=@Year
GROUP BY vg.nazvanie_vuza
) AS SelectedYearTable
ON (SelectedYearTable.nazvanie_vuza = TotalTable.nazvanie_vuza)
END
Задание 13
Выдать статистику по категориям обучения учащихся вашего государства, исключая студентов-заочников и аспирантов-заочников. Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень требуемых категорий обучения с цифрами, не равными нулю.
ALTER PROCEDURE [dbo].[GetStudyCategoryStats]
AS
BEGIN
SELECT COUNT(*) AS 'Общее количество'
FROM bel b
INNER JOIN kat_obuch ko ON (ko.cod=b.kat_obuch_k)
WHERE NOT (ko.kat_obucheniya LIKE '%ЗАОЧНИК%')
SELECT
ko.kat_obucheniya AS 'Категория'
,COUNT(*) AS 'Количество учащихся'
FROM bel b
INNER JOIN kat_obuch ko ON (ko.cod=b.kat_obuch_k)
WHERE NOT (ko.kat_obucheniya LIKE '%ЗАОЧНИК%')
GROUP BY ko.kat_obucheniya
END
Задание 14
Выдать статистику по специальностям 4-ой, 5-ой и 6-ой групп (т. е. специальности от 0401 до 0699) учащихся вашего государства. Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень требуемых шифров специальностей с цифрами, не равными нулю.
CREATE PROCEDURE [dbo].[GetStatsOFSpeciality456group]
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся'
FROM bel b
WHERE b.spec BETWEEN 000401 AND 000699
SELECT b.spec
,COUNT(nomer)AS 'Количество учащихся'
FROM bel b
WHERE b.spec BETWEEN 000401 AND 000699
GROUP BY b.spec
END
Задание 15
Выдать статистику по учебным заведениям столицы вашего государства. Отчет должен начинаться с заголовка, включающего название города и цифру - общее количество записей по запросу (всего по столице). Далее таблица, включающая перечень требуемых учебных заведений с цифрами, не равными нулю.
CREATE PROCEDURE [dbo].[GetStatsVuzOfCapital]
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся столицы'
FROM bel b
INNER JOIN vuz_gorod ON (vuz_gorod.cod_vuza=b.vuz_k)
WHERE vuz_gorod.nazvanie_goroda LIKE 'МИНСК'
SELECT vg.nazvanie_vuza
,COUNT(nomer)AS 'Количество учащихся'
FROM bel b
INNER JOIN vuz_gorod vg ON (vg.cod_vuza=b.vuz_k)
WHERE vg.nazvanie_goroda LIKE 'МИНСК'
GROUP BY vg.nazvanie_vuza
END