Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Labs / Russian / Lab5R-Functions-Group-by-Having-Order-by-NEW.doc
Скачиваний:
36
Добавлен:
20.02.2016
Размер:
715 Кб
Скачать
☆

3.Описание и примеры

3.1.Агрегатные функции

Агрегатные функции без фраз WHERE и GROUP BY. Если фразы WHERE и GROUP BY отсутствуют, то областью действия агрегатной функции являются все строки таблицы.

Пример. Сколько строк в таблице TEACHER:

SELECT COUNT(*) AS Total_rows_in_TEACHER_table

FROM TEACHER;

Пример. Чему равна сумма фондов всех факультетов:

SELECT SUM(Fund)

FROM FACULTY;

Пример. Какой средний фонд финансирования кафедр:

SELECT AVG(Fund)

FROM DEPARTMENT;

Агрегатные функции с фразой WHERE. При наличии фразы WHERE областью действия агрегатной функции являются те строки, которые удовлетворяют условию фразы WHERE.

Пример. Какова средняя ставка ассистентов, которые не имеют надбавки.

SELECT AVG(Salary)

FROM TEACHER

WHERE UPPER(Post) = 'ASSISTANT' AND Commission IS NULL;

Пример. Какой максимальный фонд среди кафедр факультета информатики?

SELECT MAX(DEPARTMENT.Fund)

FROM DEPARTMENT, FACULTY

WHERE DEPARTMENT.FacNo = FACULTY.FacNo AND UPPER(FACULTY.Name) = 'INFORMATICS';

Выражения в агрегатной функции. Аргументы агрегатных функций могут содержать выражения над столбцами таблицы.

Премер. Какова максимальная величина Salary+Commission?

SELECT MAX(Salary + Commission)

FROM TEACHER;

Пример. Какова разница между максимальной и минимальной ставками?

SELECT MAX(Salary) – MIN(Salary)

FROM TEACHER;

DISTINCT в агрегатных функциях. Ключевое слово DISTINCT означает, что в расчет следут брать только уникальные значения столбца (выражения) аргумента.

Пример. Сколько номеров телеыонов в таблице TEACHER:

SELECT COUNT(DISTINCT Tel) AS Number_of_telephones

FROM TEACHER;

Пример. Сколько должностей в таблице TEACHER:

SELECT COUNT(DISTINCT Post)

FROM TEACHER;

Множество агрегатных функций в списке select. Список Select может содержать множество агрегатных функций.

Example. Сколько профессоров в Вузе и какова их средняя ставка:

SELECT COUNT(*), SUM( Salary )

FROM TEACHER

WHERE UPPER(Post) = 'PROFESSOR';

Агрегатные функции с фразой GROUP BY. См. примеры фразы использования фразы GROUP BY.

3.2.Фразы group by и having

GROUP BY и агрегатные функции в списке select.

Пример. Сколько кафедр в каждом из корпусов:

SELECT Building, COUNT(*)

FROM DEPARTMENT

GROUP BY Building;

Example. Какова сумма зарлпты (Salary+Commission) по всем имеющимся должностям:

SELECT Post, SUM(Salary + Commission)

FROM TEACHER

GROUP BY Post;

Группирование и фраза WHERE. Если запрос содержит фразы WHERE и GROUP BY, то фразаWHERE обрабатывается первой, а затем применяется группирование.

Пример. Для каждого корпуса подсчитать количество аудиторий вместимостью более 50:

SELECT Building, COUNT(*)

FROM ROOM

WHERE Seats > 50

GROUP BY Building;

Пример. Для корпусов 5, 7 и 12 подсчитать количество аудиторий вместимостью более 50:

SELECT Building, COUNT(*)

FROM ROOM

WHERE UPPER(Building) IN ('5', '7', '12') AND Seats > 50

GROUP BY Building;

Группирование по многим столбцам. Можно группировать по многим столбцам.

Пример. Для каждой недели и дня недели подсчитать количество лекций типа “lab”:

SELECT Day, Week, COUNT(*)

FROM LECTURE

WHERE UPPER(Type) = 'LAB'

GROUP BY Week, Day;

Группирование и соединение различных таблиц. Имеется возможность соединить две или более таблиці и зптем произвести группирование по соединенной таблице.

Пример. По каждому факультету выдать количество кафедр:

SELECT f.Name, COUNT(*)

FROM FACULTY f, DEPARTMENT d

WHERE f.FacNo = d.FacNo

GROUP BY f.Name;

Пример. По каждому факультету выдать количество профессоров:

SELECT f.Name, COUNT(*)

FROM FACULTY f, DEPARTMENT d, TEACHER t

WHERE f.FacNo = d.FacNo AND d.DepNo = t.DepNo AND UPPER(t.Post) = 'PROFESSOR'

GROUP BY f.Name;

Пример. Для каждой кафедры каждого факультета подсчитать количество профессоров:

SELECT f.Name, d.Name, COUNT(*)

FROM FACULTY f, DEPARTMENT d, TEACHER t

WHERE f.FacNo = d.FacNo AND d.DepNo = t.DepNo AND UPPER(t.Post) = 'PROFESSOR'

GROUP BY f.Name, d.Name;

Использование фразы HAVING. Она задает условие на группу. Фразы HAVING обычно содержат агрегатную функцию.

Example. Вывести корпуса, в которых суммарное количество мест в аудиториях меньше 1000:

SELECT Building

FROM ROOM

GROUP BY Building

HAVING SUM(Seats) < 1000;

Соседние файлы в папке Russian