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 | |