Shanraq.org Shanraq.org
Соединение таблиц и честный отчёт
Общество

Информатика: создаём своего цифрового помощника Урок 53 из 72

Соединение таблиц и честный отчёт

Соединим две таблицы и сохраним в отчёте задачу, для которой занятий пока нет.

Где мы на карте

Урок 53 из 72, блок «Данные, таблицы и базы» (47–54). Мы продолжаем помощника 1.1 с тремя вымышленными задачами. В конце блока его записи будут храниться в локальном SQLite, а проверенные правила напоминаний останутся прежними.

Соединение таблиц и честный отчёт

Ситуация и вопрос

Обычное соединение показывает только t-01 и t-03. Если забыть t-02, читатель решит, что такой задачи никогда не было. Тип соединения меняет вопрос отчёта.

Новые слова без пропусков

JOIN соединяет строки по условию. INNER JOIN оставляет только совпадения в обеих таблицах. LEFT JOIN оставляет все строки левой таблицы и подставляет NULL, если справа совпадения нет. COALESCE(SUM(...), 0) показывает в отчёте ноль вместо пустого итога; подпись должна уточнить «нет записанных занятий». Группировка GROUP BY объединяет занятия по ID задачи. Зернистость отчёта — одна строка на задачу, не на занятие.

Опорный сигнал

Прочитайте схему слева направо. Для каждой стрелки назовите вход, преобразование и проверку. Закройте третий шаг и предскажите его. Затем найдите соответствующую строку в CSV, SQL или отчёте: нарисованная стрелка не должна подменять реальные значения и связи.

Разбираем шаг за шагом

Поставьте tasks слева, study_sessions справа. Обычный INNER JOIN даёт четыре строки занятий и теряет t-02. LEFT JOIN даёт пять строк: четыре занятия и одну строку с задачей t-02, где поля занятия NULL. После GROUP BY t.task_id получаем три строки. Суммы: t-01 — 45, t-02 — 0, t-03 — 25. Проверьте, что 45+0+25=70, но не делайте вывод, будто 0 означает измеренную нулевую сессию.

Предскажите и проверьте

Сначала запишите ожидаемый вывод точно, включая порядок строк. Затем выполните код из папки step-05 и сравните посимвольно. Измените один вход и повторите цикл «предсказать — запустить — объяснить». Пример доказывает только заявленное правило: он не превращает учебные вымышленные данные в измерение реальных людей.

from pathlib import Path
from tempfile import TemporaryDirectory
from data_store import create_database, minutes_report
with TemporaryDirectory() as folder:
    db = Path(folder) / "test.db"
    create_database(db, "tasks.json", "study_sessions.csv")
    for task_id, minutes in minutes_report(db):
        print(task_id, minutes)

Ожидаемый вывод

t-01 45
t-02 0
t-03 25

Поймайте ошибку

Если фильтровать s.source = 'app' в WHERE после LEFT JOIN, строка без занятия исчезнет: условие по NULL не истинно. Для отчёта «все задачи, занятия из app» фильтр по правой таблице помещают в ON, затем явно проверяют ожидания.

Изменение проекта

minutes_report строит результат для всех трёх задач. Сохраните рядом число исходных сессий (4), число строк отчёта (3) и контрольную сумму (70). Это защита от тихой потери категории.

Задание и доказательство

Нарисуйте результат INNER и LEFT JOIN до группировки. Объясните, почему в одном четыре строки, в другом пять. Проверьте отчёт по трём ID и назовите отсутствие данных у t-02.

Перенос в новую ситуацию

Есть список всех классов и таблица результатов олимпиады. Как показать в отчёте класс без участников, не превращая отсутствие результата в плохую оценку?

Возврат через 1, 7 и 30 дней

Через 1 день восстановите схему по памяти и назовите случай, где простая аналогия не работает. Через 7 дней объясните новую таблицу товарищу без текста и ответьте минимум на 7 из 10 вопросов итогового урока. Через 30 дней повторите импорт во временную папку и проверьте три задачи, четыре занятия, сумму 70 и неизменные напоминания. Запишите оставшийся непонятным термин и вернитесь к его первому определению.

Первоисточник для проверки

Официальная документация

Следующий урок

Выпуск 1.2: помощник с SQLite

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.