Задание 3 ЕГЭ: база данных: продажа билетов
База данных: продажа билетов в театр. Тема номера — реляционная база данных. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.
Пример
Задание выполняется с использованием прилагаемого файла.
В файле 3.xlsx приведён фрагмент базы данных «Театральная касса». База данных состоит из трёх таблиц. Таблица «Продажи» содержит записи о продаже билетов: дату, спектакль, категорию зрителя и количество билетов. Таблица «Спектакль» содержит название, автора пьесы, жанр и полную цену билета. Таблица «Категория» — категории зрителей и их скидку в процентах от полной цены.
Используя информацию из приведённой базы данных, определите выручку (в рублях) театра от продажи билетов на показы спектаклей по пьесам автора Грибоедов зрителям категории «студент» с 12.10.2026 по 21.10.2026 включительно.
В ответе запишите только число.
Ответ
31080Решение
Связываем таблицы по ID: у каждой продажи берём спектакль (автор, жанр, цена) и категорию (скидка). Отбираем продажи по трём условиям и складываем «цена со скидкой × количество». В электронной таблице — ВПР по ID и СУММЕСЛИМН или фильтр со столбцом «выручка».
Ответ: 31080.
from openpyxl import load_workbook
wb = load_workbook('3.xlsx')
shows = {r[0]: r for r in wb['Спектакль'].iter_rows(min_row=2, values_only=True)}
cats = {r[0]: r for r in wb['Категория'].iter_rows(min_row=2, values_only=True)}
total = 0
for sid, date, show, cat, cnt in wb['Продажи'].iter_rows(min_row=2, values_only=True):
s, c = shows[show], cats[cat]
day = int(date[:2])
if s[2] == 'Грибоедов' and c[1] == 'студент' and 12 <= day <= 21:
total += s[4] * (100 - c[2]) // 100 * cnt
print(total)