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

Postgres. Пишем запросы на SQL (case). Статья 6

Оглавление

Все ссылки на статьи и ролики моего канала:

Программирование. Тематическое оглавление моего Zen-канала (Old Programmer)
Old Programmer17 августа 2020

Мои материалы по языку SQL здесь.

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

Некоторые мои статьи по языку SQL

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

авненько не брал я в руки шашек" - воскликнул один литературный герой. Давненько и мы не разминались запросами SQL. Значит пришла пора. Сегодня пришло время узнать, как можно в первом разделе команды select, т.е. там где перечисляются столбцы результирующего запроса, использовать условную конструкцию.

Условие CASE против объединений запросов UNION

Но в начале о задаче и как ее можно решать. Имеется такая база данных: две связанные таблицы students <id, fio> и marks <id, id_s, mark>. Другими словами имеем учащихся и их оценки (см. Рисунок 1). Другая информация нас не интересует. Связаны таблицы, как вы понимаете по линии id - id_s, т.е. как обычно PK-FK.

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

Задача заключается в том, чтобы получить список студентов и для каждого студента указать уровень:
1.
Отличник, если средняя оценка больше 4.5.
2.
Ударник, если средняя оценка меньше или равна 4.5 и больше или равна 4.
3.
Троечник, если средняя оценка меньше 4 и больше или равна трем.
4.
Двоечник, если средняя оценка меньше 3.
При этом результат следует упорядочить начиная с отличников и заканчивая двоечниками. Конечно, напрашивается решение с использование
union, что вы и видите ниже (40a.sql). Смысл решения заключается в том, что мы в начале объединяем четыре запроса select в один, с помощью оператора union. И затем, рассматривая результат как подзапрос, используем его в качестве такой виртуальной таблицы. При этом упорядочивание следует проводить, естественно, по среднему значению оценки, а не по названию уровня ученика. Согласитесь, что получился довольно неуклюжий запрос, хотя и вполне понятный.

А вот если использовать условную конструкцию case - end, то решение получится более коротким и изящным. Этот запрос представлен в 40.sql, согласитесь это красиво.

Да, язык SQL не слишком похож на обычные языки программирования, но он просто незаменим, когда мы имеем дело с реляционными базами данных.

Ну вот и все. Пока! Пишите запросы sql, используйте postgresql и подписываемся на мой канал.

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

#программирование #программисты #sql #postgresql #языки программирования

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