
Информатика: өз цифрлық көмекшімізді жасаймыз 53-сабақ (барлығы 72)
Кестелерді біріктіру және адал есеп
Екі кестені біріктіріп, сабағы әлі жазылмаған тапсырманы есептен жоғалтпаймыз.
Картадағы орнымыз
72 сабақтың 53-сі, «Деректер, кестелер және дерекқорлар» блогы (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 бес жол береді: төрт сабақ және сабақ өрістері NULL болатын t-02 жолы. GROUP BY t.task_id кейін үш жол қалады. Қосындылар: t-01 — 45, t-02 — 0, t-03 — 25. 45+0+25=70 тексеріңіз; нөлді өлшенген нөл минуттық сабақ деп түсінбеңіз.
Болжаңыз және тексеріңіз
Алдымен жол ретіне дейін нақты күтілетін нәтижені жазыңыз. Кодты 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
Қатені табыңыз
LEFT JOIN соңында WHERE s.source = 'app' деп сүзсеңіз, сабағы жоқ жол жоғалады: NULL бойынша шарт ақиқат емес. «Барлық тапсырма, app сабақтары» есебінде оң жақ шартын ON ішіне қойып, нәтижені бөлек тексеріңіз.
Жобаға енгізілетін өзгеріс
minutes_report үш тапсырманың барлығын көрсетеді. Қасына бастапқы сабақ саны (4), есеп жолдары (3), бақылау қосындысы (70) жазылады. Бұл санаттың үнсіз жоғалуынан қорғайды.
Тапсырма және дәлел
Топтауға дейін INNER және LEFT JOIN нәтижесін салыңыз. Неліктен бірінде төрт, екіншісінде бес жол бар? Үш ID бойынша есепті тексеріп, t-02 дерегінің жоқтығын атаңыз.
Жаңа жағдайға көшіру
Барлық сынып тізімі мен олимпиада нәтижесі бар. Қатысушысы жоқ сыныпты нәтижесіз күйінде қалай көрсетесіз, жоқ мәнді жаман бағаға айналдырмай?
1, 7 және 30 күннен кейін қайталау
1 күннен кейін сызбаны жатқа салып, қарапайым ұқсастық жұмыс істемейтін жағдайды атаңыз. 7 күннен кейін жаңа кестені мәтінсіз досыңызға түсіндіріп, соңғы сабақтағы он сұрақтың кемінде жетеуіне жауап беріңіз. 30 күннен кейін уақытша бумаға импорт жасап, үш тапсырма, төрт сабақ, 70 минут және өзгермеген еске салуды тексеріңіз. Түсініксіз терминді жазып, алғашқы анықтамасына оралыңыз.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.