Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). Мои материалы по языку SQL здесь.
Смотрим статьи по данной теме:
И опять я о своем любимом - запросах select языка SQL. Аппарат, заложенный в команде select, позволяет конструировать сколь угодно сложные запросы, освобождая программистов, пишущих на стороне клиента, от обработки больших массивов информации. Особенно, если учесть, что клиентский компьютер может и не иметь хорошей производительности и достаточных ресурсов. Как и ранее запросы проверялись на Postgres.
Объединение select-запросов с помощью union
Обратимся к схеме данных, которую я уже использовал. Имеются две связанные таблицы: students <id, name> и ocenki <id, idst, ocenka> (см. Рисунок 1). id - обозначают первичные ключи таблиц, idst - внешний ключ для связи таблиц, названия других столбцов говорят сами за себя.
Нужно провести следующий анализ: выявить самых хороших и самых плохих студентов. Критерии следующие: средние оценки хороших учеников больше общей средней оценки и кроме этого у них есть оценки 5. Плохие студенты те, средняя оценка которых, меньше общей средней оценки и у них встречаются двойки. Если в условии имеется заданное количество групп результатов, как в данном случае, то прямой путь к использования такого мощного средства как union, с помощью которого можно объединять произвольное количество запросов. Объединять можно только запросы совпадающие по типу выводимых полей и их количеству.
При анализе запроса (см. ниже) следует обратить внимание на 1). Внешний запрос - соединение таблицы students и запроса в скобках. 2). Структура запроса в скобках - объединение двух запросов с помощью ключевого слова union (плохих и хороших студентов). 3. Также обращаем внимание на роль агрегирующих функций: avg, max, min.
Объединение с помощью union обладает одной особенностью: исключаются дублирующие строки. Чтобы это предотвратить используем union all.
Ну вот и все. Пишите запросы sql и будете счастливы. Подписывайтесь на мой канал Old Programmer. Пока!
Читаем мои статьи:
О циклах в программировании (цикл for в Python). Статья 3
Объектно-ориентированное программирование (C++). Статья 1
Программирование. Строки в Python. Статья 1
Рекурсия в программировании (глобальные переменные). Статья 3
Из воспоминаний "старого" программиста.