В начало

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

Агрегирование данных с использованием фразы HAVING

 

 Выдать различные: 

1)      фамилии людей и число людей с каждой из этих фамилий, ограничив список фамилиями, встречающимися не менее 50 раз.

2)      имена людей и число людей с каждым из этих имен, ограничив список именами, встречающимися не менее 300 раз.

3)      отчества людей и число людей с каждым из этих отчеств, ограничив список отчествами, встречающимися не менее 300 раз.

Списки упорядочить по уменьшению количества фамилий (имен или отчеств).

 

1)      

SELECT фамилия, COUNT(фамилия)

FROM н_люди

GROUP BY фамилия

HAVING COUNT(фамилия)>=50

ORDER BY 2 DESC

 

2)      

SELECT имя, COUNT(имя)

FROM н_люди

GROUP BY имя

HAVING COUNT(имя)>=300

ORDER BY 2 DESC

 

ИЛИ

 

SELECT имя, COUNT(*)

FROM н_люди

GROUP BY имя

HAVING COUNT(*)>=300

ORDER BY 2 DESC

 

3)      

SELECT отчество, COUNT(*)

FROM н_люди

GROUP BY отчество

HAVING COUNT(*)>=300

ORDER BY 2 DESC

 

26) Найти группы, в которых 4.7.2004 было менее десяти обучающихся студентов.

 

SELECT группа, COUNT(*) число_учеников

FROM н_ученики

WHERE TO_CHAR(начало)<'04.07.2004'

AND TO_CHAR(конец)>'04.07.2004'

GROUP BY группа

HAVING COUNT(*)<10

 

27) В таблице Н_ГРУППЫ_ПЛАНОВ найти номера планов, по которым обучается (обучалось) более 4 групп.

 

SELECT план_ид, COUNT(план_ид) число_групп

FROM н_группы_планов

GROUP BY план_ид

HAVING COUNT(*)>4

 

·        Вывести номера отделов, которые имеют в своем составе более 3 отделов

 

SELECT отд_ид, COUNT(*)

FROM н_отделы

GROUP BY отд_ид

HAVING COUNT(*)>3

ORDER BY 1

 

·        Найти года, в которые студенты получили больше 500 троек.

 

SELECT TO_CHAR(дата,'YYYY'), COUNT(оценка) число_оценок

FROM н_ведомости

WHERE оценка='3'

GROUP BY TO_CHAR(дата,'YYYY')

HAVING COUNT(*)>500

ORDER BY 1