Информатика: ОГЭ и ЕГЭ

Тренировка ЕГЭ · задание 3 · запрос к реляционной базе данных

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

База данных: движение товаров в магазинах. Тема номера — реляционная база данных. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.

Пример

Задание выполняется с использованием прилагаемого файла.

В файле приведён фрагмент базы данных «Продукты» о поставках товаров в магазины районов города и их продажах. База данных состоит из трёх таблиц.

Таблица «Движение товаров» содержит записи о поступлении товаров со склада в магазины в течение июня 2026 г., а также информацию о проданных товарах. Поле Тип операции содержит значение Поступление или Продажа, а в соответствующее поле Количество упаковок, шт. внесена информация о том, сколько упаковок товара поступило в магазин или было продано в течение дня. Заголовок таблицы имеет следующий вид.

ID операцииДата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))

Решить такую задачу — новый вариант с проверкой

Задание 3 ЕГЭ: другие виды

Все задачи задания 3 вперемешку · разбор: как решать задание 3 · пробные варианты ЕГЭ