Автор: Вардомацкая Елена Юрьевна, ст. преподаватель кафедры математики и информационных технологий УО "Витебский государственный технологический университет".
Пример 8. Проанализировать популярность у вкладчиков видов вкладов предоставляемых банком.
SELECT [Код вклада], Sum ([Сумма вклада]) AS [Сумма вкладов], Avg ([Сумма вклада]) AS [Среднее значение вклада]
FROM Сведения
GROUP BY [Код вклада];
Код вклада | Сумма вкладов | Среднее значение вклада |
ВД | 7666,67 | |
ВДН | 12333,33 | |
ВДС | 7333,33 | |
ТВ | 23666,67 |
Здесь группировка данных с вычислением итогов производится по одному полю [Код вклада].
Каждая группа состоит из всех тех строк, которые имеют одно и то же значение поля [Код вклада], а функции SUM и AVG применяется отдельно к каждой такой группе. Это означает, что поле, к которому применяется GROUP BY, по определению имеет на выходе только одно значение на каждую группу, что соответствует применению агрегатных функций. Таким образом, все записи базы, для которых значения полей совпадают, отображаются в выборке единственной строкой.
Возможна группировка по нескольким полям.
Пример 9. Проанализировать популярность у вкладчиков видов вкладов предоставляемых банком. Вывести полную информацию по видам вкладов.
SELECT [Вид вклада], [Ставка %] AS [Процентная ставка], Sum ([Сумма вклада]) AS [Общая сумма вкладов], Avg ([Сумма вклада]) AS [Среднее значение вклада]
FROM Справочник, Сведения
WHERE (((Справочник.Код)=[Сведения].[Код вклада]))
GROUP BY [Вид вклада], [Ставка %];
Вид вклада | Процентная ставка | Общая сумма вкладов | Среднее значение вклада |
Валютный депозит | 7666,67 | ||
Валютный депозит накопительный | 12333,33 | ||
Валютный депозит срочный | 7333,33 | ||
Валютный текущий | 23666,67 |
Пример 10. Проанализировать вклады за истекшие месяцы.
|
В этом случае нужно сгруппировать данные по дате, выделив из дат параметр «месяц».
Для работы с данными типа Дата/время SQL располагает специальными функциями
Day – выделяет число - номер дня месяца введенной даты
Month - выделяет число – номермесяца даты
Year - выделяет число – номергода даты.
SELECT Month(Дата) AS Месяц, Count([Сумма вклада]) AS [Количество вкладов], Avg([Сумма вклада]) AS [В среднем на вкладе], Sum([Сумма вклада]) AS [Итого за месяц]
FROM Сведения
GROUP BY Month(Дата);
Месяц | Количество вкладов | В среднем на вкладе | Итого за месяц |
Пример 10_1. Проанализировать вклады за январь 2009 г.
В этом случае нужно сгруппировать данные по дате, а затем из получившихся групп выбрать ту, у которой значение даты =1, что соответствует месяцу январь.
Функцию отбора данных из групп выполняет параметр HAVING. Он определяет критерий, согласно которому определенные группы исключаются из числа выходных данных так же, как параметр WHERE делает это для отдельных строк. HAVING является необязательным параметром, но если он задан, то должен следовать за параметром GROUP BY.
SELECT Month(Дата) AS Месяц, Count([Сумма вклада]) AS [Количество вкладов], Avg([Сумма вклада]) AS [В среднем на вкладе], Sum([Сумма вклада]) AS [Итого за январь]
FROM Сведения
GROUP BY Month(Дата)
HAVING (Month(Дата)=1);
Месяц | Количество вкладов | В среднем на вкладе | Итого за январь |
Пример 10_2. Проанализировать вклады за период с января по март 2009г.
|
SELECT Month(Дата) AS Месяц, Sum([Сумма вклада]) AS [В среднем за месяц], Min([Сумма вклада]) AS [Min вклад], Max([Сумма вклада]) AS [Max вклад]
FROM Сведения
GROUP BY Month(Дата)
HAVING (((Month([Дата])) Between 1 And 3));
Месяц | В среднем за месяц | Min вклад | Max вклад |
Упорядочивание выходных полей
Таблицы базы данных являются неупорядоченными множествами, и выбираемые из них данные необязательно представлены в какой-либо определенной последовательности.
Команда ORDER BY позволяет упорядочить выходные данные запроса в соответствии со значениями одного или нескольких выбранных столбцов. Можно задать возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию установлена сортировка по возрастанию, т.е. параметр ASC можно не указывать. Внутри уже упорядоченной по одному полю таблицы можно провести упорядочение и по другому столбцу.
Пример 11. Вывести сведения о вкладчиках, упорядочив выходной набор по полю Дата по возрастанию, а по полю Сумма вклада – по убыванию:
SELECT Дата, [Сумма вклада], ФИО
FROM Сведения
ORDERBY Дата, [Сумма вклада] DESC;
Дата | Сумма вклада | ФИО |
05.01.2009 | Богданова О. | |
05.01.2009 | Купцова С. | |
05.01.2009 | Костин В. | |
10.01.2009 | Суворов А. | |
02.02.2009 | Пугачева А. | |
02.02.2009 | Орлова И. | |
02.02.2009 | Михайлова А. | |
02.02.2009 | Сергеев И. | |
02.02.2009 | Петрова И. | |
02.02.2009 | Разин А. | |
01.03.2009 | Соколова Н. | |
04.03.2009 | Архипов Н. |
Вложение запросов
SQL позволяет вкладывать запросы друг в друга. Обычно внутренний запрос генерирует значения, которые тестируются на предмет истинности предиката. В подзапросах можно использовать функции агрегирования. При использовании подзапросов в предикатах основанных на реляционных операторах необходимо убедиться, что подзапрос выдает только одну строку вывода.
|