Задание 3:
поиск в базе данных

Три связанные таблицы, один вопрос, одно число в ответе.
Решаем в электронных таблицах — так это делают на экзамене.

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

как это выглядит

Условие — полстраницы, а работа вся в файле

«Определите общую массу (в кг) всех видов зефира, поступивших в магазины, расположенные на Прибрежной улице, за период с 5 по 19 июня включительно».

почему не глазами

Шесть тысяч строк — и ответ ни в одной из них

Что не работает

  • прокрутить и посчитать — строк тысячи;
  • найти «зефир» поиском — в таблице движения его нет;
  • сложить весь столбец — там и другие товары, и другие магазины, и продажи вместо поступлений.

Что работает

  • подтянуть к каждой строке то, чего в ней нет — ВПР;
  • оставить только нужные строки — автофильтр, а сумму прочитать внизу, в строке состояния.

Два действия. Всё остальное — внимательность к условию.

устройство

Три таблицы держатся на двух ключах

Движение товаровключсправочник
столбец Артикул→ Товар: наименование, единица, сколько в упаковке, цена
столбец ID магазина→ Магазин: район и адрес
порядок работы

Четыре шага, всегда одни и те же

1Выписать условия из вопроса: что суммируем, тип операции, даты, место, товар.
2Найти в справочниках коды: артикулы нужных товаров, ID нужных магазинов.
3В таблице движения сделать вспомогательный столбец: значение строки.
4Отфильтровать по условиям и прочитать сумму внизу, в строке состояния.
шаг 2

Коды ищутся в справочниках — и только глазами

  • «Все виды зефира» — это несколько артикулов: «Зефир в шоколаде», «Зефир ванильный», «Зефир воздушный». Отфильтровать лист «Товар» по наименованию и выписать номера.
  • «Магазины Заречного района» — фильтр по столбцу «Район».
шаг 3

ВПР подтягивает то, чего в строке нет

= E2 * ВПР(D2; Товар.$A:$F; 5; 0)
D2что ищем — артикул из этой строки
Товар.$A:$Fгде ищем; искомое обязано быть в первом столбце диапазона
5номер столбца внутри диапазона, а не на листе: пятый — «Количество в упаковке»
0точное совпадение. Без нуля формула возьмёт «ближайшее» и тихо соврёт
шаг 4

Фильтр — по одному условию на столбец

Выделить шапку таблицы движения, Данные → Автофильтр. Дальше список условий из шага 1 превращается в список фильтров:

условиегде и как
тип операции«Тип операции»: оставить Поступление
период«Дата»: Стандартный фильтр — >= первая дата И <= последняя
местостолбец района или адреса из ВПР: район — галочкой, улица — «содержит»
товарстолбец наименования из ВПР: «начинается с» слова вида
шаг 4, итог

Сумма — внизу, в строке состояния

  • щёлкнуть по букве вспомогательного столбца — он выделен целиком;
  • посмотреть вниз окна: Сумма: … — это и есть ответ;
  • считаются только видимые строки — скрытые фильтром в сумму не входят, заголовок тоже (он текст).
ловушка 1

Тип операции: «увеличилось» — это разность

в вопросечто брать
«поступило», «получено»только Поступление
«продано», «выручка»только Продажа
«на сколько увеличилось количество» Поступление минус Продажа
ловушка 2

Единицы измерения: делить или не делить

граммы, мл

Спрашивают кг и литры — делим на 1000.

кг, литр в упаковке

Упаковка дробная (0,5 кг) — не делим, уже в нужных единицах.

«Вес упаковки, кг»

Готовый вес — не делим ни на что.

Столбец «Ед_изм» в справочнике — не украшение. Смотреть на него до того, как написана формула.

ловушка 3

Цена бывает не там, где её ждут

Обычно

Цена в справочнике «Товар» — одна на всё время.

= E2 * ВПР(D2; Товар.$A:$F; 6; 0)

Иногда

Цена в самой строке движения: она менялась по дням, и в справочнике её просто нет.

= E2 * G2

Первым делом — посмотреть на шапку таблицы движения. Есть там столбец с ценой или нет.

второй способ

То же самое на Python — не обязательно

Листы сохраняются в CSV (Файл → Сохранить как → Текст CSV, разделитель ;), дальше обычный цикл:

tovar = {r['Артикул']: r for r in read('Товар.csv')}
magaz = {r['ID магазина']: r for r in read('Магазин.csv')}

итог = 0
for r in read('Движение.csv'):
    t = tovar[r['Артикул']]
    m = magaz[r['ID магазина']]
    if (r['Тип операции'] == 'Поступление'
            and t['Наименование товара'].startswith('Зефир')
            and 'Прибрежная' in m['Адрес']
            and (2025, 6, 5) <= dat(r['Дата']) <= (2025, 6, 19)):
        итог += int(r['Количество упаковок, шт']) * int(t['Количество в упаковке'])

Словарь по ключу — тот же ВПР, только руками. На экзамене в задании 3 это дольше; но в заданиях 9, 26 и 27 таблицы уже не тянут, и путь понадобится.

Дальше — практикум

Шесть задач, по одной на каждый тип. У каждого свой файл: страница соберёт базу и отдаст кнопкой.

  • ошибся — разбор прямо с числами твоей базы;
  • задача вернётся с новой базой, балл можно доработать;
  • ответ — целое число, без пробелов и без «кг».
Материалы подготовлены с использованием технологий искусственного интеллекта. Пробел раскрыть и дальше · ← → слайды