Добавил:
t.me Установите расширение 'SyncShare' для решения тестов в LMS (Moodle): https://syncshare.naloaty.me/ . На всякий лучше отключить блокировщик рекламы с ним. || Как пользоваться ChatGPT в России: https://habr.com/ru/articles/704600/ || Также можно с VPNом заходить в bing.com через Edge браузер и общаться с Microsoft Bing Chat, но в последнее время они форсят Copilot и он мне меньше нравится. || Студент-заочник ГУАП, группа Z9411. Ещё учусь на 5-ом курсе 'Прикладной информатики' (09.03.03). || Если мой материал вам помог - можете написать мне 'Спасибо', мне будет очень приятно :) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс 1 семестр / Лабораторные / Z9411_КафкаРС_БД_ЛР6.docx
Скачиваний:
8
Добавлен:
24.10.2023
Размер:
293.59 Кб
Скачать
    1. Листинг написанных запросов, описание и результаты их выполнения

Запрос 1. Найти профессию, диапазон которой между минимальной и максимальной зарплатой меньше, чем у остальных профессий. Код запроса представлен в листинге 8.

Листинг 8 – Код 1 запроса

WITH temp AS (

SELECT job_title, MIN(min_salary) AS min_salary, MAX(max_salary) AS max_salary, MAX(max_salary) - MIN(min_salary) AS wage_range

FROM jobs

GROUP BY job_title

)

SELECT job_title, min_salary, max_salary

FROM temp

WHERE wage_range = (SELECT MIN(wage_range) FROM temp);

Запрос начинается с общего табличного выражения (CTE - Common Table Expression) с именем temp. CTE — это временный набор результатов, который определяется в запросе и может быть использован позже в запросе.

В CTE запрос выбирает название должности, минимальную зарплату, максимальную зарплату и рассчитывает диапазон зарплаты для каждой должности путем вычитания минимальной зарплаты из максимальной зарплаты.

Затем запрос группирует данные по наименованию должности с помощью пункта GROUP BY и рассчитывает минимальную и максимальную минимальную и максимальную зарплату для каждой должности с помощью агрегатных функций MIN() и MAX().

В последнем операторе SELECT запрос выбирает столбцы job_title, min_salary и max_salary из временного CTE и фильтрует данные, чтобы показать только job_title с самым низким диапазоном зарплаты, используя предложение WHERE и сравнение с минимальным диапазоном зарплаты, рассчитанным в CTE.

Этот запрос возвращает название должности с самым низким диапазоном между минимальной и максимальной зарплатой, то есть профессию с самым низким диапазоном между минимальной и максимальной зарплатой.

Результат выполнения запроса представлен на рисунке 6.

Рисунок 8 – Выполнение 1 запроса

Запрос 2. Вывести названия профессий(job_title) и среднюю зарплату (в диапазоне от 2000 до 5000) сотрудников этих профессий. Код запроса представлен в листинге 9.

Листинг 9 – Код 2 запроса

SELECT job_title, AVG(salary) AS avg_salary

FROM jobs

JOIN employees ON jobs.job_id = employees.job_id

WHERE salary BETWEEN 2000 AND 5000

GROUP BY job_title;

Запрос начинается с оператора SELECT, который выбирает название должности и среднюю зарплату (avg_salary) сотрудников.

Затем запрос соединяет таблицы jobs и employees с помощью предложения JOIN и ключевого слова ON, связывая столбцы jobs.job_id и employees.job_id. Это соединение объединяет данные из таблиц jobs и employees в один набор результатов.

Затем в запросе используется предложение WHERE для фильтрации данных, чтобы показать только те значения зарплаты, которые находятся в диапазоне от 2000 до 5000.

Затем в запросе используется предложение GROUP BY для группировки данных по названию должности. Этот шаг агрегирует данные, так что мы получаем только одну строку данных для каждого названия должности.

Затем запрос вычисляет среднюю зарплату для каждого названия должности с помощью агрегатной функции AVG().

Затем запрос выбирает название должности и рассчитанную среднюю зарплату из набора результатов.

Этот запрос возвращает название должности и среднюю зарплату сотрудников с зарплатой в диапазоне от 2000 до 5000.

Результат выполнения запроса представлен на рисунке 9.

Рисунок 9 – Результат выполнения 2 запроса

ЗАКЛЮЧЕНИЕ

В результате выполнения лабораторной работы я познакомился с СУБД PostgreSQL и укрепил знания о языке запросов SQL.

Согласно методическим указаниям была создана база данных, схема данных, таблицы с данными. Были выполнены запросы к таблицам, согласно варианту.

Методические указания написаны чётко и понятно. Единственное с чем возникли проблемы – у меня не создавалась схема «hr». При попытке переименовать стандартную «public» вылезала ошибка о том, что схема с названием «hr» уже существует. Обновление данных не помогало. Было решено остаться работать на стандартной схеме, поскольку это никак не повлияло на работу.

Дополнительно задание решил не делать с точки зрения экономии времени. На данный момент существуют другие задачи и нет уверенности что дополнительное задание повлияет на итоговую оценку. Задача заинтересовала, но из-за причины выше решил её не выполнять.

Считаю что выполнил работу в полном объёме, результатом доволен.