| 326 | | === Scenario 2: Monthly Analysis of Course Activity, Completions, Instructor Involvement and Student Success === |
| | 326 | === Scenario 2: Monthly analysis of course activity, completions, instructor involvement, and student success within a given year === |
| | 327 | |
| | 328 | {{{ |
| | 329 | WITH student_course_month_performance AS ( |
| | 330 | SELECT |
| | 331 | EXTRACT(YEAR FROM qa.attempt_date) AS year, |
| | 332 | EXTRACT(MONTH FROM qa.attempt_date) AS month, |
| | 333 | c.course_id, |
| | 334 | qa.user_id, |
| | 335 | ROUND(AVG(qa.score), 2) AS avg_student_score |
| | 336 | FROM quiz_attempt qa |
| | 337 | JOIN quiz q |
| | 338 | ON q.quiz_id = qa.quiz_id |
| | 339 | JOIN lesson l |
| | 340 | ON l.lesson_id = q.lesson_id |
| | 341 | JOIN module m |
| | 342 | ON m.module_id = l.module_id |
| | 343 | JOIN course c |
| | 344 | ON c.course_id = m.course_id |
| | 345 | GROUP BY |
| | 346 | EXTRACT(YEAR FROM qa.attempt_date), |
| | 347 | EXTRACT(MONTH FROM qa.attempt_date), |
| | 348 | c.course_id, |
| | 349 | qa.user_id |
| | 350 | ), |
| | 351 | course_month_performance AS ( |
| | 352 | SELECT |
| | 353 | year, |
| | 354 | month, |
| | 355 | course_id, |
| | 356 | ROUND(AVG(avg_student_score), 2) AS avg_course_success |
| | 357 | FROM student_course_month_performance |
| | 358 | GROUP BY |
| | 359 | year, |
| | 360 | month, |
| | 361 | course_id |
| | 362 | ), |
| | 363 | month_performance_summary AS ( |
| | 364 | SELECT |
| | 365 | year, |
| | 366 | month, |
| | 367 | ROUND(AVG(avg_course_success), 2) AS final_month_success |
| | 368 | FROM course_month_performance |
| | 369 | GROUP BY |
| | 370 | year, |
| | 371 | month |
| | 372 | ) |
| | 373 | SELECT |
| | 374 | EXTRACT(YEAR FROM e.enroll_date) AS year, |
| | 375 | EXTRACT(MONTH FROM e.enroll_date) AS month, |
| | 376 | COUNT(DISTINCT e.enrollment_id) AS total_enrollments, |
| | 377 | COUNT(DISTINCT CASE |
| | 378 | WHEN e.completion_status = 'COMPLETED' THEN e.enrollment_id |
| | 379 | END) AS completed_enrollments, |
| | 380 | COUNT(DISTINCT c.instructor_id) AS active_instructors, |
| | 381 | ROUND(AVG(scmp.avg_student_score), 2) AS avg_student_success, |
| | 382 | ROUND(AVG(cmp.avg_course_success), 2) AS avg_course_success, |
| | 383 | mps.final_month_success |
| | 384 | FROM enrollment e |
| | 385 | JOIN course c |
| | 386 | ON c.course_id = e.course_id |
| | 387 | LEFT JOIN student_course_month_performance scmp |
| | 388 | ON scmp.year = EXTRACT(YEAR FROM e.enroll_date) |
| | 389 | AND scmp.month = EXTRACT(MONTH FROM e.enroll_date) |
| | 390 | AND scmp.course_id = e.course_id |
| | 391 | AND scmp.user_id = e.user_id |
| | 392 | LEFT JOIN course_month_performance cmp |
| | 393 | ON cmp.year = EXTRACT(YEAR FROM e.enroll_date) |
| | 394 | AND cmp.month = EXTRACT(MONTH FROM e.enroll_date) |
| | 395 | AND cmp.course_id = e.course_id |
| | 396 | LEFT JOIN month_performance_summary mps |
| | 397 | ON mps.year = EXTRACT(YEAR FROM e.enroll_date) |
| | 398 | AND mps.month = EXTRACT(MONTH FROM e.enroll_date) |
| | 399 | GROUP BY |
| | 400 | EXTRACT(YEAR FROM e.enroll_date), |
| | 401 | EXTRACT(MONTH FROM e.enroll_date), |
| | 402 | mps.final_month_success |
| | 403 | ORDER BY |
| | 404 | year, |
| | 405 | month; |
| | 406 | |
| | 407 | }}} |
| | 408 | |