Найти в Дзене
Old Programmer

Postgres. Пишем запросы на SQL (объединение запросов). Статья 4

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). Мои материалы по языку SQL здесь.

Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021

Смотрим статьи по данной теме:

Postgres. Пишем запросы (select) на SQL, подзапросы. Статья 1
Old Programmer13 июля 2020
Postgres. Пишем запросы на SQL (оконные функции). Статья 2
Old Programmer14 июля 2020
Postgres. Пишем запросы на SQL (подзапросы, limit, группировка). Статья 3
Old Programmer20 июля 2020

И опять я о своем любимом - запросах select языка SQL. Аппарат, заложенный в команде select, позволяет конструировать сколь угодно сложные запросы, освобождая программистов, пишущих на стороне клиента, от обработки больших массивов информации. Особенно, если учесть, что клиентский компьютер может и не иметь хорошей производительности и достаточных ресурсов. Как и ранее запросы проверялись на Postgres.

Объединение select-запросов с помощью union

Обратимся к схеме данных, которую я уже использовал. Имеются две связанные таблицы: students <id, name> и ocenki <id, idst, ocenka> (см. Рисунок 1). id - обозначают первичные ключи таблиц, idst - внешний ключ для связи таблиц, названия других столбцов говорят сами за себя.

Рисунок 1. Схема данных
Рисунок 1. Схема данных

Нужно провести следующий анализ: выявить самых хороших и самых плохих студентов. Критерии следующие: средние оценки хороших учеников больше общей средней оценки и кроме этого у них есть оценки 5. Плохие студенты те, средняя оценка которых, меньше общей средней оценки и у них встречаются двойки. Если в условии имеется заданное количество групп результатов, как в данном случае, то прямой путь к использования такого мощного средства как union, с помощью которого можно объединять произвольное количество запросов. Объединять можно только запросы совпадающие по типу выводимых полей и их количеству.

При анализе запроса (см. ниже) следует обратить внимание на 1). Внешний запрос - соединение таблицы students и запроса в скобках. 2). Структура запроса в скобках - объединение двух запросов с помощью ключевого слова union (плохих и хороших студентов). 3. Также обращаем внимание на роль агрегирующих функций: avg, max, min.

Объединение с помощью union обладает одной особенностью: исключаются дублирующие строки. Чтобы это предотвратить используем union all.

Ну вот и все. Пишите запросы sql и будете счастливы. Подписывайтесь на мой канал Old Programmer. Пока!

Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021

Читаем мои статьи:
О циклах в программировании (цикл for в Python). Статья 3
Объектно-ориентированное программирование (C++). Статья 1
Программирование. Строки в Python. Статья 1
Рекурсия в программировании (глобальные переменные). Статья 3
Из воспоминаний "старого" программиста.

Запрос (5.sql), решающий поставленную в статье задачу
Запрос (5.sql), решающий поставленную в статье задачу

Рекомендуем почитать