Разборы · ЕГЭ, задание 3
Задание 3 ЕГЭ по информатике: реляционная база данных
Что проверяет задание
К заданию приложен файл электронной таблицы с фрагментом базы данных из нескольких связанных таблиц. Нужно по связям собрать нужные записи и посчитать итог: количество, сумму, массу, выручку. Оценивается в 1 балл, в поле ответа — только число.
Что нужно знать
- Ключ — поле, по которому таблицы связаны (ID магазина, артикул). Схема базы в условии показывает, какие поля связаны.
- ВПР (VLOOKUP) подтягивает в главную таблицу данные из справочника по ключу:
=ВПР(C2;Магазин!A:C;3;0). Последний аргумент 0 — точное совпадение. - Автофильтр отбирает строки по условиям. После фильтра суммируйте функцией
ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;…): обычная СУММ считает и скрытые строки.
Как решать
- Найдите главную таблицу — обычно это таблица операций.
- Подтяните в неё через ВПР все нужные поля из справочников: адрес магазина, название товара, вес упаковки.
- Поставьте фильтры: тип операции, диапазон дат, адрес, товар.
- Добавьте столбец с вычислением (например, упаковки × граммы) и просуммируйте отфильтрованное.
- Переведите в единицы, о которых спрашивают.
Пример из демоверсии 2027
База «Кондитерские изделия» состоит из таблиц «Движение товаров» (ID операции, дата, ID магазина, артикул, количество упаковок, тип операции — «Поступление» или «Продажа»), «Товар» (артикул, отдел, наименование, единица измерения, количество в упаковке, цена) и «Магазин» (ID магазина, район, адрес).
Определите общую массу (в кг) всех видов зефира, полученного магазинами на Прибрежной улице с 5 по 19 июня включительно.
Решение. На Прибрежной улице два магазина. Зефир бывает нескольких видов, у всех масса упаковки указана в граммах. Отбираем операции «Поступление» зефира в эти магазины с 05.06 по 19.06, для каждой считаем «упаковки × граммы в упаковке», складываем и делим на 1000. Ответ: 1630.
То же на Python (для файла .ods нужен пакет odfpy, для .xlsx — openpyxl):
import pandas as pd
book = pd.read_excel("3.ods", sheet_name=None) # все листы файла
df = (book["Движение_товаров"]
.merge(book["Товар"], on="Артикул")
.merge(book["Магазин"], on="ID магазина"))
sel = df[(df["Тип операции"] == "Поступление")
& df["Наименование товара"].str.startswith("Зефир")
& df["Адрес"].str.contains("Прибрежная")
& df["Дата"].between("2025-06-05", "2025-06-19")]
grams = (sel["Количество упаковок, шт."] * sel["Количество в упаковке"]).sum()
print(grams / 1000) # 1630.0
Типичные ошибки
- Путают «Поступление» и «Продажа».
- Не включают граничные даты: «с 5 по 19 июня включительно» — это обе даты.
- Забывают перевести граммы в килограммы или умножить на количество в упаковке.
- Суммируют функцией СУММ после фильтра и получают сумму по всем строкам.
- Ищут улицу по неполному слову и захватывают лишние адреса — просмотрите список адресов глазами.
Потренироваться: задание 3 новые варианты с проверкой ответа