Задание 3 ЕГЭ по информатике: поиск в реляционной базе данных

Задание 3 ЕГЭ по информатике даёт файл с базой данных из нескольких связанных таблиц и вопрос, для ответа на который нужно отобрать записи по нескольким условиям. Решается в электронной таблице: сведения из справочных таблиц подтягивают функцией ВПР, строки отбирают фильтром и считают сумму.

Как решать

На экзамене база дана файлом электронной таблицы: каждая таблица на своём листе. Главная таблица содержит операции (поступления, продажи, выдачи), справочные — сведения о товарах или книгах и о магазинах или библиотеках. Таблицы связаны по номерам: ID магазина, артикулу, шифру книги.

Шаг 1. На листе с операциями добавьте справа столбцы для сведений из справочных таблиц. Функция ВПР ищет значение в первом столбце другого листа и возвращает значение из нужного столбца той же строки. Например, =ВПР(C2;Магазин!A:C;2;0) вернёт район магазина с номером из ячейки C2. Последний аргумент 0 означает точное совпадение.

Шаг 2. Включите автофильтр и отберите строки по всем условиям вопроса: тип операции, район, период, раздел или наименование. Для наименования используйте условие «начинается с» или «содержит», если в вопросе сказано «все виды».

Шаг 3. Добавьте столбец с нужной величиной, например количество упаковок, умноженное на количество в упаковке, и найдите сумму по отобранным строкам. Функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;диапазон) складывает только видимые строки, обычная СУММ учитывает и скрытые фильтром.

Вместо фильтра можно использовать СУММЕСЛИМН по добавленным столбцам. Если удобнее программа, сохраните листы в формате CSV и прочитайте их на Python, как в примерах ниже. В примерах таблицы небольшие, чтобы ответ можно было проверить вручную; в экзаменационном файле строк сотни.

Примеры с решением

Пример 1

В файле 03_ex1.txt — фрагмент базы данных «Канцелярия» о поставках и продажах в магазинах города. В файле три таблицы, они разделены пустой строкой, столбцы разделены табуляцией.

Таблица «Движение товаров» содержит записи о поступлении товаров в магазины и о продажах с 1 по 14 марта 2026 года. Поле «Тип операции» содержит значение «Поступление» или «Продажа», в поле «Количество упаковок» записано, сколько упаковок поступило или продано за день. Столбцы: ID операции, Дата, ID магазина, Артикул, Количество упаковок, Тип операции.

Таблица «Товар»: Артикул, Отдел, Наименование товара, Ед. изм., Количество в упаковке, Цена за упаковку.

Таблица «Магазин»: ID магазина, Район, Адрес.

Используя информацию из базы данных, определите, сколько тетрадей всех видов (в штуках) поступило в магазины Заречного района с 3 по 10 марта включительно. В ответе запишите только число.

Файл данных: 03_ex1.txt — 64 строки, 2,9 КБ. Первые строки файла:

# Движение товаров
ID операции	Дата	ID магазина	Артикул	Количество упаковок	Тип операции
1	01.03.2026	1	108	2	Поступление
2	01.03.2026	6	106	22	Продажа
3	01.03.2026	2	107	13	Поступление
4	02.03.2026	5	103	11	Продажа
5	02.03.2026	6	102	11	Продажа
6	02.03.2026	1	105	15	Продажа

Проверка ответа на Python

def read_tables(name):
    """Файл примера: три таблицы, между ними пустая строка; первая строка блока — имя таблицы."""
    tables = {}
    with open(name, encoding="utf-8") as f:
        for block in f.read().strip().split("\n\n"):
            lines = block.splitlines()
            header = lines[1].split("\t")
            tables[lines[0].lstrip("# ")] = [dict(zip(header, line.split("\t"))) for line in lines[2:]]
    return tables


t = read_tables("03_ex1.txt")
district = {s["ID магазина"]: s["Район"] for s in t["Магазин"]}
goods = {g["Артикул"]: g for g in t["Товар"]}

total = 0
for op in t["Движение товаров"]:
    day, month, year = map(int, op["Дата"].split("."))
    item = goods[op["Артикул"]]
    if (op["Тип операции"] == "Поступление"
            and district[op["ID магазина"]] == "Заречный"
            and month == 3 and 3 <= day <= 10
            and item["Наименование товара"].startswith("Тетрадь")):
        total += int(op["Количество упаковок"]) * int(item["Количество в упаковке"])

print(total)

Ответ: 484

Магазины Заречного района — номера 1 и 3. Тетради — товары с артикулами 101, 102 и 106: их наименование начинается со слова «Тетрадь».

С 3 по 10 марта в магазины 1 и 3 поступили тетради два раза: операция 8 — 14 упаковок товара 106 по 6 штук, операция 17 — 20 упаковок товара 102 по 20 штук. Продажи и поступления в другие дни и районы в ответ не входят.

Итого 14 · 6 + 20 · 20 = 84 + 400 = 484 тетради.

Пример 2

В файле 03_ex2.txt — фрагмент базы данных «Библиотеки района» о выдаче и возврате книг. Таблицы разделены пустой строкой, столбцы — табуляцией.

Таблица «Движение книг» содержит записи с 8 по 21 апреля 2026 года: ID записи, Дата, ID библиотеки, Шифр книги, Количество экземпляров, Операция. Поле «Операция» содержит значение «Выдача» или «Возврат».

Таблица «Книга»: Шифр книги, Раздел, Название, Год издания, Количество страниц.

Таблица «Библиотека»: ID библиотеки, Район, Адрес.

Определите, сколько всего страниц в экземплярах книг раздела «История», которые выдали библиотеки Центрального района с 12 по 18 апреля включительно. В ответе запишите только число.

Файл данных: 03_ex2.txt — 62 строки, 2,6 КБ. Первые строки файла:

# Движение книг
ID записи	Дата	ID библиотеки	Шифр книги	Количество экземпляров	Операция
1	08.04.2026	5	Ф-01	2	Выдача
2	08.04.2026	1	Н-01	6	Выдача
3	08.04.2026	3	Н-02	4	Возврат
4	09.04.2026	2	И-03	2	Выдача
5	09.04.2026	1	Н-01	6	Возврат
6	09.04.2026	5	Ф-01	2	Выдача

Проверка ответа на Python

def read_tables(name):
    """Файл примера: три таблицы, между ними пустая строка; первая строка блока — имя таблицы."""
    tables = {}
    with open(name, encoding="utf-8") as f:
        for block in f.read().strip().split("\n\n"):
            lines = block.splitlines()
            header = lines[1].split("\t")
            tables[lines[0].lstrip("# ")] = [dict(zip(header, line.split("\t"))) for line in lines[2:]]
    return tables


t = read_tables("03_ex2.txt")
district = {lib["ID библиотеки"]: lib["Район"] for lib in t["Библиотека"]}
books = {b["Шифр книги"]: b for b in t["Книга"]}

pages = 0
for rec in t["Движение книг"]:
    day, month, year = map(int, rec["Дата"].split("."))
    book = books[rec["Шифр книги"]]
    if (rec["Операция"] == "Выдача"
            and district[rec["ID библиотеки"]] == "Центральный"
            and month == 4 and 12 <= day <= 18
            and book["Раздел"] == "История"):
        pages += int(rec["Количество экземпляров"]) * int(book["Количество страниц"])

print(pages)

Ответ: 3584

Библиотеки Центрального района — номера 1 и 3. Книги раздела «История» — шифры И-01, И-02 и И-03.

Подходящих выдач три: запись 16 (13 апреля, 5 экземпляров И-02 по 280 страниц), запись 19 (14 апреля, 4 экземпляра И-03 по 390 страниц) и запись 25 (16 апреля, 2 экземпляра И-01 по 312 страниц). Возвраты не учитываются.

Сумма: 5 · 280 + 4 · 390 + 2 · 312 = 1400 + 1560 + 624 = 3584 страницы.

Типичные ошибки

Потренироваться на тренажёре

Частые вопросы

В какой программе решать задание 3 ЕГЭ по информатике?

В редакторе электронных таблиц на экзаменационном компьютере. В спецификации 2027 года для этого задания указано специализированное программное обеспечение. Можно решить и на Python, если сохранить листы в формате CSV, но таблица обычно быстрее.

Зачем в задании 3 функция ВПР?

ВПР добавляет к каждой операции сведения из справочной таблицы: район магазина, наименование товара, количество в упаковке. После этого все условия вопроса проверяются на одном листе одним фильтром.

Сколько времени и баллов приходится на задание 3?

Около 3 минут по спецификации 2027 года, за верный ответ ставят 1 первичный балл.

Официальные материалы

Другие задания

Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 2 и задание 4.

Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.