Лабораторные работы (А-13-07) / Ковех,Рязанов / лаб5
.docМосковский Энергетический Институт
Лабораторная работа №5
Ковех Ольга
Рязанов Михаил
10-11-2010
Задание 8
Выдать статистику по категориям обучения учащихся вашего государства только прием 1991 года. Отчет должен начинаться заголовком и цифрой - общим количеством записей по запросу (по приему 91-го года). Далее таблица, включающая перечень категорий обучения с цифрами, не равными нулю.
SELECT 'всего обучается от 91 года' as 'exp', COUNT(*) [ammount]
FROM arm
WHERE gp like '%91'
GROUP BY gp
UNION all
SELECT kat_obuch_k, COUNT(kat_obuch_k)
FROM arm
WHERE gp like '91'
GROUP BY kat_obuch_k
Задание 9
Выдать статистику по вашему государству по следующим специальностям: 0401 , 0402, 0403 и 0405 (общее число по каждой специальности), а также количества мужчин и женщин по каждой из этих специальностей. Отчет должен начинаться с соответствующего заголовка. Далее таблица из четырех строчек, где каждая строчка включает шифр специальности и 3 цифры: всего, количество мужчин и количество женщин.
Способ1:
SELECT a.spec as 'Specialization',
TotalAmm as 'Total Ammount',
ManAmm as 'Men Ammount',
WomanAmm as 'Women Ammount'
FROM
(
SELECT spec , COUNT(spec) as WomanAmm
FROM arm
WHERE nomer in
(
SELECT nomer
FROM arm
WHERE spec in (0401 ,0402 ,0403 ,0405) and pol = 'Æ')
GROUP BY spec
) as a
JOIN
(
SELECT spec , COUNT(spec) as ManAmm
FROM arm
WHERE nomer in
(
SELECT nomer
FROM arm
WHERE spec in (0401 ,0402 ,0403 ,0405) and pol = 'Ì'
)
GROUP BY spec
)as b on a.spec = b.spec
JOIN
(
SELECT spec , COUNT(spec) as TotalAmm
FROM arm
WHERE nomer in
(
SELECT nomer
FROM arm
WHERE spec in (0401 ,0402 ,0403 ,0405)
)
GROUP BY spec
) as q on q.spec = a.spec
Способ 2
select spec, COUNT (*) as [All],
sum (case when pol='М' then 1 else 0 end) as 'Man',
sum (case when pol='Ж' then 1 else 0 end) as 'Woman'
from arm
where spec in (0401 ,0402 ,0403 ,0405)
group by spec
Задание 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
Выдать статистику по городам вашего государства и только по студентам (исключая другие категории обучения). Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу (всего студентов). Далее таблица, включающая перечень городов с цифрами, не равными нулю.
ALTER PROCEDURE GetLocationStatsForStudents
AS
BEGIN
SELECT COUNT(*) AS ‘Общее количество студентов’
FROM arm 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 arm 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 года.
CREATE PROCEDURE ForStudents
(
@Year CHAR(2)
)
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся'
FROM arm
SELECT
TotalTable.nazvanie_vuza AS 'ВУЗ'
, Total AS 'Общее количество'
, SelectedYear AS 'Закончившие в указанном году'
FROM
(
SELECT vg.nazvanie_vuza , COUNT(*) AS Total
FROM arm 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 arm
INNER JOIN vuz_gorod vg ON(vg.cod_vuza=arm.vuz_k)
WHERE
arm.gok=@Year
GROUP BY vg.nazvanie_vuza
) AS SelectedYearTable
ON (SelectedYearTable.nazvanie_vuza = TotalTable.nazvanie_vuza)
END
Задание 13
Выдать статистику по категориям обучения учащихся вашего государства, исключая студентов-заочников и аспирантов-заочников. Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень требуемых категорий обучения с цифрами, не равными нулю.
CREATE PROCEDURE CategoryStats
AS
BEGIN
SELECT COUNT(*) AS 'Общее количество'
FROM arm 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 arm 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) учащихся вашего государства. Отчет должен начинаться с соответствующего заголовка и цифры - общего количества записей по запросу. Далее таблица, включающая перечень требуемых шифров специальностей с цифрами, не равными нулю.
ALTER PROCEDURE groupii
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся'
FROM arm b
WHERE b.spec BETWEEN 000401 AND 000699
SELECT b.spec
,COUNT(nomer)AS 'Количесвто учащихся'
FROM arm b
WHERE b.spec BETWEEN 000401 AND 000699
GROUP BY b.spec
END
Задание 15
Выдать статистику по учебным заведениям столицы вашего государства. Отчет должен начинаться с заголовка, включающего название города и цифру - общее количество записей по запросу (всего по столице). Далее таблица, включающая перечень требуемых учебных заведений с цифрами, не равными нулю.
CREATE PROCEDURE OfCapital
AS
BEGIN
SELECT COUNT(nomer) AS 'Общее количество учащихся столицы'
FROM arm 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 arm b
INNER JOIN vuz_gorod vg ON (vg.cod_vuza=b.vuz_k)
WHERE vg.nazvanie_goroda LIKE 'ЕРЕВАН'
GROUP BY vg.nazvanie_vuza
END