Задание 3 ЕГЭ: запрос к реляционной базе данных
База данных: движение товаров в магазинах. Тема номера — реляционная база данных. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.
Пример
Задание выполняется с использованием прилагаемого файла.
В файле приведён фрагмент базы данных «Продукты» о поставках товаров в магазины районов города и их продажах. База данных состоит из трёх таблиц.
Таблица «Движение товаров» содержит записи о поступлении товаров со склада в магазины в течение июня 2026 г., а также информацию о проданных товарах. Поле Тип операции содержит значение Поступление или Продажа, а в соответствующее поле Количество упаковок, шт. внесена информация о том, сколько упаковок товара поступило в магазин или было продано в течение дня. Заголовок таблицы имеет следующий вид.
| ID операции | Дата | ID магазина | Артикул | Количество упаковок, шт. | Тип операции |
|---|
Таблица «Товар» содержит информацию об основных характеристиках каждого товара. Поле Ед_изм указывает, в чём измеряется количество товара в упаковке (граммы, миллилитры или штуки). Заголовок таблицы имеет следующий вид.
| Артикул | Отдел | Наименование товара | Ед_изм | Количество в упаковке | Цена за упаковку |
|---|
Таблица «Магазин» содержит информацию о местонахождении магазинов. Заголовок таблицы имеет следующий вид.
| ID магазина | Район | Адрес |
|---|
На рисунке приведена схема указанной базы данных: таблица «Движение товаров» связана с таблицей «Магазин» по полю ID магазина и с таблицей «Товар» по полю Артикул (у каждой записи о движении — ровно один магазин и ровно один товар).

Используя информацию из приведённой базы данных, определите общее количество упаковок всех видов молока, поступивших в магазины Центрального района, за период с 14 по 16 июня включительно.
В ответе запишите только число.
Ответ
390Решение
Связываем таблицы: по ID магазина берём район и адрес, по Артикулу — наименование, отдел, фасовку и цену. Подходят магазины Центрального района: M1, M7; товары, наименование которых начинается со слова «Молоко» (артикулы 4, 5). Берём только операции поступления с 14.06.2026 по 16.06.2026 включительно и суммируем количество упаковок.
В электронной таблице на листе «Движение_товаров» добавляем столбцы (формулы копируем на все строки): G2: =ВПР(C2;Магазин!A:C;2;0) — район; H2: =ВПР(D2;Товар!A:F;3;0) — наименование. Затем =СУММЕСЛИМН(E:E;F:F;"Поступление";G:G;"Центральный";H:H;"Молоко*";B:B;">=14.06.2026";B:B;"<=16.06.2026").
Ответ: 390.
На Python (файл читается библиотекой openpyxl):
import datetime as dt
import openpyxl
wb = openpyxl.load_workbook("3.xlsx")
def table(name):
rows = list(wb[name].iter_rows(values_only=True))
return [dict(zip(rows[0], r)) for r in rows[1:]]
goods = {r["Артикул"]: r for r in table("Товар")}
shops = {r["ID магазина"]: r for r in table("Магазин")}
moves = table("Движение_товаров")
for m in moves: # то же, что ВПР: подтягиваем поля справочников
m.update(goods[m["Артикул"]])
m.update(shops[m["ID магазина"]])
a, b = dt.datetime(2026, 6, 14), dt.datetime(2026, 6, 16)
sel = [m for m in moves
if m["Тип операции"] == "Поступление"
and m["Район"] == "Центральный"
and m["Наименование товара"].split()[0] == "Молоко"
and a <= m["Дата"] <= b]
print(sum(m["Количество упаковок, шт."] for m in sel))