Группировка и обобщение данных. Рекомендации по выполнению работы и перечень типовых заданий. Учебно-методическое пособие
.pdf
Министерство транспорта Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
«Российский университет транспорта»
(МИИТ)
Институт транспортной техники и систем управления
Кафедра «Управление и защита информации»
М. А. Васильева М. Я. Клепцов
«Группировка и обобщение данных». Рекомендации по выполнению работы и перечень типовых заданий
Учебно-методическое пособие
Москва 2024
УДК 681.3.06
В-19
Васильева М. А., Клепцов М. Я. Группировка и обобщение данных. Рекомендации по
выполнению работы и перечень типовых заданий. Учебно-методическое пособие. 2-е издание. – М.: РУТ(МИИТ). 2024.– 62с.
В учебно-методическом пособии рассмотрены операторы языка SQL диалекта СУБД PostgresPro, относящиеся к агрегатным функциям. Представлены варианты заданий.
Учебно-методическое пособие предназначено для обучающихся по направлению «Управление в технических системах» профиля «Управление и информатика в технических системах» (27.03.04), а также обучающихся по специальности «Компьютерная безопасность» специализации «Информационная безопасность объектов информатизации на базе компьютерных систем» (10.05.01).
Рецензент:
к. т. н., доцент кафедры «Автоматика, телемеханика и связь на железнодорожном транспорте» РУТ (МИИТ) Ваньшин А. Е.
© Васильева М. А., 2024 © Клепцов М. Я., 2024
СОДЕРЖАНИЕ |
|
Введение............................................................................................................. |
5 |
Цель работы ....................................................................................................... |
5 |
Рекомендации по выполнению работы ........................................................... |
5 |
Краткие сведения об операторах SQL, используемых для выполнения |
|
лабораторной работы .............................................................................................. |
6 |
Агрегатные функции SQL ................................................................................. |
6 |
Использование агрегатных функций с NULL значениями............................. |
9 |
Итоги для сгруппированных данных ............................................................. |
11 |
Использование предложения GROUP BY.................................................. |
11 |
Фильтрация сгруппированных данных, используя предложение HAVING |
|
............................................................................................................................... |
13 |
Изучение операторов ROLLUP и CUBE .................................................... |
14 |
Использование GROUPING SETS............................................................... |
20 |
GROUP BY ()................................................................................................. |
22 |
GROUPING .................................................................................................... |
23 |
Задание на лабораторную работу .................................................................. |
26 |
Вариант 1 ....................................................................................................... |
26 |
Вариант 2 ....................................................................................................... |
27 |
Вариант 3 ....................................................................................................... |
28 |
Вариант 4 ....................................................................................................... |
29 |
Вариант 5 ....................................................................................................... |
30 |
Вариант 6 ....................................................................................................... |
31 |
Вариант 7 ....................................................................................................... |
32 |
3 |
|
Вариант 8 ....................................................................................................... |
33 |
Вариант 9 ....................................................................................................... |
34 |
Вариант 10 ..................................................................................................... |
35 |
Вариант 11 ..................................................................................................... |
36 |
Вариант 12 ..................................................................................................... |
37 |
Вариант 13 ..................................................................................................... |
38 |
Вариант 14 ..................................................................................................... |
39 |
Вариант 15 ..................................................................................................... |
40 |
Вариант 16 ..................................................................................................... |
41 |
Вариант 17 ..................................................................................................... |
42 |
Вариант 18 ..................................................................................................... |
43 |
Вариант 19 ..................................................................................................... |
44 |
Вариант 20 ..................................................................................................... |
45 |
Вариант 21 ..................................................................................................... |
46 |
Вариант 22 ..................................................................................................... |
47 |
Вариант 23 ..................................................................................................... |
48 |
Вариант 24 ..................................................................................................... |
49 |
Вариант 25 ..................................................................................................... |
50 |
Индивидуальные задания ............................................................................... |
51 |
Вариант №1....................................................................................................... |
51 |
Вариант №2....................................................................................................... |
52 |
Вариант №3....................................................................................................... |
53 |
Вариант №4....................................................................................................... |
54 |
Вариант №5....................................................................................................... |
55 |
Список литературы ......................................................................................... |
57 |
|
4 |
ВВЕДЕНИЕ
В соответствии с Федеральным государственным общеобразовательным стандартом выпускники, освоившие программу специалитета по специальности
10.05.01 Компьютерная безопасность, и программу бакалавриата по направлению подготовки 27.03.04 Управление в технических системах, должны в том числе освоить общепрофессиональные компетенции, связанные со способностью проектировать базы данных [1], [2], [3]. Для освоения вышеуказанных компетенций в учебном плане имеются соответствующие дисциплины. В рамках преподавания данных дисциплин студенты изучают в том числе язык структурированных запросов SQL (Structured Query Language).
Базы данных являются неотъемлемой частью бизнес-приложений [4], [5], [6], [7], [8], поэтому изучению их проектирования уделяется серьезное внимание [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19]. Помимо знаний о том, как правильно спроектировать схемы БД [19], [20], важно понимать как с ней работать [21], тестировать запросы [22], оценивать быстродействие выполнения скриптов [23], [24].
ЦЕЛЬ РАБОТЫ
Изучить операторы SQL диалекта Postgres Pro, необходимые для группировки и обобщения данных. Научиться создавать запросы с агрегатными1
функциями. Подготавливать отчет, выполненный согласно требованиям ГОСТ 7.32 [25].
РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
Работа |
производится |
с |
учебной |
базой |
данной |
AdwentureWorksPostgrePro [26], [27].
1 статистические функции
5
Каждый скрипт должен выполняться в отдельном файле [28], [29] и иметь задание в виде комментария [30]. Всю работу необходимо проводить в системе контроля версий [31], [9], [32], [30], [10]. Отчет по выполненной работе должен быть выполнен с соблюдением ГОСТ по НИР 7.32 [25].
КРАТКИЕ СВЕДЕНИЯ ОБ ОПЕРАТОРАХ SQL, ИСПОЛЬЗУЕМЫХ ДЛЯ
ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
Агрегатные функции SQL
К агрегатным функциям относятся функции поиска минимального (MIN) и
максимального (MAX) значений, вычисления среднего (AVG) и суммарного (SUM)
значений, нахождения количества элемента (COUNT) [33], [34].
!Агрегатная функция выбирается в предложении SELECT.
В данном предложении возможно различное сочетание только агрегатных функций.
Пример 1
Найти максимальную цену товара.
SELECT MAX("ListPrice") AS "MaxPrice"
FROM "Production"."Product";
Рисунок 1 – Результат выполнения запроса (Пример 1)
Пример 2
Найти среднюю и суммарную цену всех товаров.
SELECT AVG("ListPrice") AS "AvgPrice"
, SUM("ListPrice") AS "SumPrice"
FROM "Production"."Product";
6
Рисунок 2 – Результат выполнения запроса (Пример 2)
Ограничение на тип входных данных – численное значение – имеется для функций расчета средней (AVG) и суммарной (SUM) величины. Для остальных функций можно использовать любые типы данных.
Для фильтрации исходных данных, к которым не будут применены агрегатные функции, используется предложение WHERE. Порядок выполнения в данном случае такой: сначала выполняется предложение FROM, затем фильтруются данные в предложении WHERE, и только в конце выполняются агрегатные функции из предложения SELECT [13].
Пример 3
Найти минимальную цену товара. При этом исключить из рассмотрения товар с ценой равной нулю.
SELECT MIN("ListPrice") AS "MinPrice"
FROM "Production"."Product"
WHERE "ListPrice" > 0;
Рисунок 3 – Результат выполнения запроса (Пример 3)
Пример 4
Показать количество разнообразных цветов товара (ассортимент
цветов).
SELECT COUNT(DISTINCT "Color") AS "CountColors"
FROM "Production"."Product";
7
Рисунок 4 – Результат выполнения запроса (Пример 4)
Пример 5
Показать полный возраст, количество лет, месяцев и дней, зная дату
рождения.
Для выполнения данного запроса можно воспользоваться функцией
DATE_PART(Interval, StartDate, EndDate), которая возвращает
интервал в днях, месяцах или годах соответственно (DAY, MONTH, YEAR)
между начальной и конечной датами. Функция CURRENT_DATE возвращает текущую дату. Функция AGE() рассчитывает интервал между двумя датами.
SELECT
AGE(CURRENT_DATE, '1990-04-06'),
DATE_PART('year'
,AGE(CURRENT_DATE
,'1990-04-06')) AS years,
DATE_PART('month'
,AGE(CURRENT_DATE
,'1990-04-06')) AS months,
DATE_PART('day'
,AGE(CURRENT_DATE
,'1990-04-06')) AS days;
Рисунок 5 – Результат выполнения запроса (Пример 5)
Пример 6
Показать возраст самого пожилого сотрудника.
SELECT DATE_PART('YEAR', AGE(CURRENT_DATE,
MIN("BirthDate"))) AS "Oldest"
FROM "HumanResources"."Employee";
8
Рисунок 6– Результат выполнения запроса (Пример 6)
Пример 7
Найти среднюю цену товара черного цвета.
SELECT AVG ("ListPrice") AS "AvgPrice"
FROM "Production"."Product"
WHERE "ListPrice" > 0 AND "Color" LIKE 'Black%';
Рисунок 7 – Результат выполнения запроса (Пример 7)
!В предложении WHERE нельзя использовать фильтрацию (ограничение) на значения агрегатных функций. Если необходимо ограничить значения агрегатных функций, используется предложение HAVING, о котором будет рассказано ниже.
Использование агрегатных функций с NULL значениями
Большинство агрегатных функций игнорируют NULL значения. NULL
значения могут приводить к неожиданным или некорректным результатам.
Чтобы избежать ошибок, используйте функцию COALESCE() к тем полям таблицы, которые могут иметь значения NULL.
Пример 8
Найти средний вес товара (не учитывать пустые значения). Для решения данного примера можно использовать два подхода.
Решение 1. Использовать функцию COALESCE() для преобразования значений NULL в нули. Подразумевается, что товаров с нулевым весом
(Weight = 0) в таблице Production.Product нет.
9
SELECT AVG(COALESCE("Weight", 0)) AS "AvgWeight"
FROM "Production"."Product"
WHERE "Weight" > 0;
Рисунок 8 – Результат выполнения запроса (Пример 8)
Решение 2. Использовать ограничение IS NOT NULL.
SELECT AVG("Weight") AS "AvgWeight"
FROM "Production"."Product"
WHERE "Weight" IS NOT NULL;
В результате получим такой же результат, как представлено выше
(Рисунок 8).
Для подсчета количества строк в таблице используется функция COUNT(*).
Для подсчета количества строк с игнорированием NULL значений необходимо отфильтровать значения NULL.
Пример 9
Посчитать количество наименований товара.
SELECT COUNT(*) AS "Product Count"
FROM "Production"."Product";
Рисунок 9 – Результат выполнения запроса (Пример 9)
Пример 10
Посчитать количество товара, имеющего атрибут "цвет".
SELECT COUNT("Color") AS "Product Count"
FROM "Production"."Product"
WHERE "Color" IS NOT NULL;
10
