| 6 | | SELECT s.id_student, u.username, sub.progress_score |
| 7 | | FROM Submission sub |
| 8 | | JOIN Student s ON sub.id_student = s.id_student |
| | 6 | WITH student_attendance AS ( |
| | 7 | SELECT |
| | 8 | id_student, |
| | 9 | COUNT(*) AS total_classes, |
| | 10 | COUNT(*) FILTER (WHERE attended = TRUE) AS attended_classes |
| | 11 | FROM Attendance |
| | 12 | GROUP BY id_student |
| | 13 | ), |
| | 14 | student_grades AS ( |
| | 15 | SELECT |
| | 16 | id_student, |
| | 17 | AVG(progress_score) AS avg_score |
| | 18 | FROM Submits |
| | 19 | GROUP BY id_student |
| | 20 | ), |
| | 21 | student_risk_score AS ( |
| | 22 | SELECT |
| | 23 | a.id_student, |
| | 24 | (attended_classes * 1.0 / NULLIF(total_classes, 0)) AS attendance_rate, |
| | 25 | g.avg_score, |
| | 26 | CASE |
| | 27 | WHEN (attended_classes * 1.0 / NULLIF(total_classes, 0)) < 0.5 AND g.avg_score < 60 THEN 'High Risk' |
| | 28 | WHEN (attended_classes * 1.0 / NULLIF(total_classes, 0)) < 0.7 OR g.avg_score < 70 THEN 'Medium Risk' |
| | 29 | ELSE 'Low Risk' |
| | 30 | END AS risk_level |
| | 31 | FROM student_attendance a |
| | 32 | JOIN student_grades g ON a.id_student = g.id_student |
| | 33 | ) |
| | 34 | SELECT |
| | 35 | s.id_student, |
| | 36 | u.username, |
| | 37 | attendance_rate, |
| | 38 | avg_score, |
| | 39 | risk_level |
| | 40 | FROM student_risk_score r |
| | 41 | JOIN Student s ON r.id_student = s.id_student |
| 52 | | SELECT c.id_Course, s.name AS subject_name, |
| 53 | | AVG(sub.progress_score) AS course_avg_score, |
| 54 | | (SELECT AVG(progress_score) FROM Submission) AS overall_avg_score |
| 55 | | FROM Submission sub |
| 56 | | JOIN Enrollment e ON sub.id_student = e.id_student |
| 57 | | JOIN Course c ON e.id_Course = c.id_Course |
| 58 | | JOIN Subject_Course sc ON c.id_Course = sc.id_Course |
| 59 | | JOIN Subject s ON sc.id_subject = s.id_subject |
| 60 | | GROUP BY c.id_Course, s.name; |
| | 67 | |
| 66 | | SELECT |
| 67 | | t.id_teacher, |
| 68 | | u.username AS teacher_name, |
| 69 | | s.id_subject, |
| 70 | | s.name AS subject_name, |
| 71 | | AVG(r.rating) AS avg_rating, |
| 72 | | RANK() OVER (PARTITION BY s.id_subject ORDER BY AVG(r.rating) DESC) AS rank |
| 73 | | FROM Rating r |
| 74 | | JOIN Teacher t ON r.id_teacher = t.id_teacher |
| 75 | | JOIN User u ON t.id_user = u.id_user |
| 76 | | JOIN Course c ON t.id_teacher = c.created_by |
| 77 | | JOIN Subject_Course sc ON c.id_Course = sc.id_Course |
| 78 | | JOIN Subject s ON sc.id_subject = s.id_subject |
| 79 | | GROUP BY t.id_teacher, u.username, s.id_subject, s.name |
| 80 | | ORDER BY avg_rating DESC; |
| | 73 | |