Базы данных
Задание 3 ЕГЭ по информатике: реляционная база данных в таблицах — разбор и примеры
В третьем задании к условию прилагается файл электронной таблицы, в котором хранится небольшая реляционная база данных: несколько листов, связанных между собой по ключам. Типичный набор — «Товары», «Магазины» и «Движение товаров» (журнал операций поступления и продажи). Нужно ответить на вопрос, для которого требуется собрать сведения сразу с нескольких листов: сколько килограммов товара продано, на сколько увеличилось количество упаковок, какова выручка за период.
Задание проверяет не знание конкретной программы, а понимание того, как устроена база данных и как выполнить к ней запрос. Решать можно фильтрами, формулами или короткой программой на Python.
Что проверяет задание
- понимание терминов таблица (отношение), запись, поле, первичный ключ (уникальный идентификатор записи) и внешний ключ (поле, ссылающееся на ключ другой таблицы);
- умение «связать» таблицы: по артикулу в журнале найти отдел и вес товара, по ID магазина — район;
- умение отобрать записи по нескольким условиям одновременно (период, тип операции, район, отдел) и выполнить подсчёт.
Типичные формулировки
- «Сколько килограммов товаров отдела N было продано в магазинах района M за период с … по …?»
- «На сколько увеличилось количество упаковок товара X во всех магазинах района M за период?» — здесь поступления прибавляются, продажи вычитаются.
- «Какова общая стоимость (выручка) проданных товаров …?» — нужна цена из справочника товаров.
- «Сколько различных товаров … поступало …?» — подсчёт уникальных значений.
Ответ — обычно целое число; если получается дробное, в условии сказано, как его записать.
Пошаговый метод
- Изучите структуру. Для каждого листа выпишите поля и найдите ключи: какое поле журнала ссылается на какой справочник.
- Добавьте в журнал нужные поля из справочников. В таблице это делается формулой поиска (
ВПРилиПРОСМОТРX): рядом с артикулом появляются отдел и вес упаковки, рядом с ID магазина — район. - Отфильтруйте записи по всем условиям: даты (с учётом границ периода включительно), тип операции, район, отдел.
- Посчитайте итог. Для веса — сумма произведений «количество упаковок × вес упаковки». Удобно добавить вспомогательный столбец с этим произведением и сложить его по отфильтрованным строкам, либо сразу применить
СУММЕСЛИМН. - Проверьте здравый смысл ответа и единицы измерения (кг или г, упаковки или штуки).
Разбор примера
Небольшая база данных магазинов из трёх листов (в настоящем задании строк в сотни раз больше, но приём тот же).
Лист «Товары»:
| Артикул | Наименование | Отдел | Вес упаковки, кг |
|---|---|---|---|
| 1 | Гречка | Бакалея | 0,9 |
| 2 | Рис | Бакалея | 0,8 |
| 3 | Сыр | Молочные продукты | 0,3 |
| 4 | Кефир | Молочные продукты | 1,0 |
| 5 | Овсянка | Бакалея | 0,5 |
Лист «Магазины»: M1 — Северный район, M2 — Заречный, M3 — Северный, M4 — Центральный.
Лист «Движение товаров» (дата — день октября):
| ID | Дата | Магазин | Артикул | Тип операции | Упаковок |
|---|---|---|---|---|---|
| 1 | 02.10 | M1 | 1 | Продажа | 10 |
| 2 | 03.10 | M1 | 1 | Продажа | 12 |
| 3 | 03.10 | M2 | 2 | Продажа | 20 |
| 4 | 03.10 | M3 | 5 | Поступление | 40 |
| 5 | 03.10 | M3 | 5 | Продажа | 16 |
| 6 | 04.10 | M1 | 3 | Продажа | 25 |
| 7 | 04.10 | M3 | 2 | Продажа | 15 |
| 8 | 04.10 | M4 | 1 | Продажа | 30 |
| 9 | 05.10 | M1 | 2 | Поступление | 50 |
| 10 | 05.10 | M3 | 1 | Продажа | 8 |
| 11 | 05.10 | M1 | 5 | Продажа | 6 |
| 12 | 06.10 | M3 | 2 | Продажа | 14 |
| 13 | 05.10 | M2 | 5 | Продажа | 9 |
| 14 | 04.10 | M1 | 4 | Продажа | 11 |
Вопрос. Сколько килограммов товаров отдела «Бакалея» было продано в магазинах Северного района с 3 по 5 октября включительно?
Шаг 1. Отбор по справочникам. Северный район — магазины M1 и M3. Отдел «Бакалея» — артикулы 1, 2 и 5.
Шаг 2. Отбор операций. Оставляем продажи с датами 03.10–05.10 в магазинах M1, M3 с артикулами 1, 2, 5. Подходят операции 2, 5, 7, 10 и 11. Операция 1 не входит по дате, 4 и 9 — поступления, 3 и 13 — другой район, 6 и 14 — другой отдел, 8 — Центральный район, 12 — 6 октября.
Шаг 3. Подсчёт. 12 × 0,9 = 10,8; 16 × 0,5 = 8; 15 × 0,8 = 12; 8 × 0,9 = 7,2; 6 × 0,5 = 3. Сумма: 10,8 + 8 + 12 + 7,2 + 3 = 41.
Ответ: 41.
Решение формулами
В листе «Движение товаров» добавьте столбцы: Отдел — =ВПР(D2;Товары!A:D;3;0), Вес — =ВПР(D2;Товары!A:D;4;0), Район — =ВПР(C2;Магазины!A:B;2;0) и Кг — =F2*H2 (номера столбцов зависят от вашей таблицы). Затем либо включите автофильтр и посмотрите сумму столбца Кг в строке состояния, либо одной формулой: =СУММЕСЛИМН(J:J;G:G;"Бакалея";I:I;"Северный";E:E;"Продажа";B:B;">="&ДАТА(2026;10;3);B:B;"<="&ДАТА(2026;10;5)).
Код на Python
Если данные выгружены в CSV, итог можно посчитать программой. Логика та же: справочники превращаются в словари, журнал фильтруется.
goods = {1: ('Бакалея', 0.9), 2: ('Бакалея', 0.8), 3: ('Молочные продукты', 0.3),
4: ('Молочные продукты', 1.0), 5: ('Бакалея', 0.5)}
shops = {'M1': 'Северный', 'M2': 'Заречный', 'M3': 'Северный', 'M4': 'Центральный'}
moves = [(2, 'M1', 1, 'Продажа', 10), (3, 'M1', 1, 'Продажа', 12), (3, 'M2', 2, 'Продажа', 20),
(3, 'M3', 5, 'Поступление', 40), (3, 'M3', 5, 'Продажа', 16), (4, 'M1', 3, 'Продажа', 25),
(4, 'M3', 2, 'Продажа', 15), (4, 'M4', 1, 'Продажа', 30), (5, 'M1', 2, 'Поступление', 50),
(5, 'M3', 1, 'Продажа', 8), (5, 'M1', 5, 'Продажа', 6), (6, 'M3', 2, 'Продажа', 14),
(5, 'M2', 5, 'Продажа', 9), (4, 'M1', 4, 'Продажа', 11)] # (день, магазин, артикул, тип, упаковок)
kg = sum(n * goods[art][1] for day, shop, art, kind, n in moves
if 3 <= day <= 5 and kind == 'Продажа'
and shops[shop] == 'Северный' and goods[art][0] == 'Бакалея')
print(round(kg, 3)) # 41.0Функция round нужна из-за погрешности вычислений с дробными числами: без неё можно увидеть 40.99999999999999.
Частые ошибки
- Не учитывают границы периода. «С 3 по 5 октября» включает оба крайних дня.
- Путают поступление и продажу. В вопросе про продажи поступления не учитываются; в вопросе «на сколько изменилось количество» поступления прибавляются, а продажи вычитаются.
- Считают упаковки вместо килограммов. Если спрашивают вес, нужно умножать на вес упаковки из справочника.
- Ошибаются в ВПР. Последний аргумент должен быть 0 (точное совпадение), иначе формула может вернуть чужую строку.
- Неверно копируют формулы, забывая закрепить диапазон справочника знаками
$.
Потренируйтесь
Порешайте задачи этого типа: задания № 3 в банке. Подробнее о связях между таблицами — в статье «Работа с несколькими таблицами: фильтрация, связь и подсчёт». Дальше по порядку — задание 4: кодирование и условие Фано.