Группирование результатов
Часто встречаются ситуации, когда в отчет необходимо поместить и промежуточные результаты, опирающиеся на вычисления обобщенных групповых значений. Для применения агрегатных функций в подобных случаях предполагается предварительная операция группировки. Суть операции группировки состоит в том, что все множество строк таблицы разбивается на группы, в каждой из которых собираются строки, имеющие одинаковые значения атрибутов, которые заданы в списке группировки. Обработка такой информации реализуется путем применения агрегатных функций уже к каждой отдельной группе и выдаче полученных итогов.
В языке SQL для осуществления операции группировки в оператор SELECT включается фраза GROUP BY. Запрос, в котором присутствует фраза GROUP BY, называется группирующим запросом, а столбцы, перечисленные в этой фразе, называются группирующими столбцами.
В дальнейшем в качестве примера будем работать с двумя БД: НИР и Сессия.
БД НИР состоит из одной таблицы, в которой хранится информация о производимых выплатах специалистам за проделанную работу по определенным этапам НИР: R= (ФИО, Этап, Начисления).
Пусть таблица содержит следующие данные.
r
БД Сессия включает в себя сводную таблицу, где представлены
экзаменационные оценки студентов, полученные ими в сессию по
определенным дисциплинам:
S = (ФИО, Дисциплина, Оценка);
s
Cформируем к базам данных несколько запросов.
Запрос 7
БД НИР. Для каждого специалиста определить сумму, выплаченную
за работу по данной теме, и количество сделанных ему выплат.
Для формирования запроса включим в предложение SELECT следующую информацию: ФИО, COUNT (Начисления) AS count, SUM (Начисления) AS sum,где в качестве имен для двух вычисляемых столбцов используются псевдонимы. Группировку будем производить постолбцу ФИО. Для того чтобы проще было просматривать результаты, выводимые данные представим в отсортированном по столбцу ФИОвиде
SELECT ФИО, COUNT (Начисления) AS count, SUM (Начисления)
AS sum FROM r GROUP BY ФИО
ORDER BY ФИО;
Результат запроса:
Запрос 8
БД Сессия. Для каждой дисциплины определить количество
студентов, сдавших экзамен.
Запрос будет выглядеть следующим образом:
SELECT Дисциплина, COUNT (*) AS count
FROM s
GROUP BY Дисциплина
ORDER BY Дисциплина;
Результат запроса:
Запрос 9
БД НИР. В условиях предыдущего запроса вывести информацию, касающуюся только тех специалистов, которым производились начисления более одного раза.
Для вывода такой информации в текст предыдущего запроса необходимо добавить фразу HAVING COUNT (Начисления! > 1. И в этом случае весь запрос примет вид
SELECT ФИО, СОШТ (Начисления) AS count, SUM (Начисления)
AS sum
FROM r
GROUP BY ФИО
HAVING COUNT(Начисления) > 1
ORDER BY ФИО,-
Результаты выполнения запроса представлены ниже.
Вложенные запросы
Стандарт языка позволяет в тело одного оператора SELECT внедрять другой оператор SELECT. Если внутренний оператор запроса помешен в предложения WHERE И HAVING внешнего оператора SELECT, TO создается ситуация вложенных запросов (подзапросов).
Запрос 10
БД НИР. Вывести список платежей, где величина единовременных
начислении превысила среднее значение.
Запрос будет выглядеть следующим образом:
SELECT ФИО, Этап, Начисления
FROM r
WHERE Начисления > (SELECT avg(Начисления) FROM r);
Результат запроса:
Дата добавления: 2016-07-05; просмотров: 1684;