| 1 | SELECT u.name AS university_name, f.name AS faculty_name, COUNT(DISTINCT p.id) AS total_professors, COUNT(DISTINCT s.id) AS total_subjects
|
|---|
| 2 | FROM university u JOIN faculty f ON u.id = f.university_id LEFT JOIN professor p ON f.id = p.facultyid LEFT JOIN subject s ON f.id = s.facultyid
|
|---|
| 3 | GROUP BY u.name, f.name
|
|---|
| 4 | ORDER BY total_professors DESC;
|
|---|
| 5 |
|
|---|
| 6 | SELECT s.name || ' ' || s.surname AS student_name, s.studentindex, f.name AS faculty_name, COUNT(DISTINCT ss.subject_id) AS enrolled_subjects, COUNT(DISTINCT a.student_id) AS advice_requests
|
|---|
| 7 | FROM student s JOIN faculty f ON s.facultyid = f.id LEFT JOIN student_subject ss ON s.id = ss.student_id LEFT JOIN advice a ON s.id = a.student_id
|
|---|
| 8 | GROUP BY s.id, s.name, s.surname, s.studentindex, f.name
|
|---|
| 9 | ORDER BY enrolled_subjects DESC;
|
|---|
| 10 |
|
|---|
| 11 | SELECT s.studentindex, s.name || ' ' || s.surname AS student_name, AVG(ss.final_grade) AS semester_gpa, COUNT(ss.subject_id) AS completed_courses_count
|
|---|
| 12 | FROM student s
|
|---|
| 13 | JOIN student_subject ss ON s.id = ss.student_id
|
|---|
| 14 | JOIN subject sub ON ss.subject_id = sub.id
|
|---|
| 15 | WHERE sub.semester = 2
|
|---|
| 16 | AND ss.status = 'Completed'
|
|---|
| 17 | AND ss.final_grade IS NOT NULL
|
|---|
| 18 | GROUP BY s.id, s.studentindex, s.name, s.surname
|
|---|
| 19 | HAVING COUNT(ss.subject_id) = (
|
|---|
| 20 | SELECT COUNT(*)
|
|---|
| 21 | FROM student_subject ss2
|
|---|
| 22 | WHERE ss2.student_id = s.id
|
|---|
| 23 | )
|
|---|
| 24 | ORDER BY semester_gpa DESC;
|
|---|
| 25 |
|
|---|
| 26 | INSERT INTO subject (id, name, semester, facultyid)
|
|---|
| 27 | VALUES (999, 'Test Advanced Database', 2, 1);
|
|---|
| 28 |
|
|---|
| 29 | INSERT INTO student (id, name, surname, location, studentindex, facultyid)
|
|---|
| 30 | VALUES (999, 'Petar', 'Petrovski', 'Skopje', 123456, 1);
|
|---|
| 31 |
|
|---|
| 32 | INSERT INTO student_subject (student_id, subject_id, status, final_grade, enrollment_date, professor_id)
|
|---|
| 33 | VALUES (999, 999, 'Completed', 10, '2026-02-15', 1);
|
|---|
| 34 |
|
|---|
| 35 |
|
|---|
| 36 | WITH StudentGPA AS (
|
|---|
| 37 | SELECT
|
|---|
| 38 | s.studentindex,
|
|---|
| 39 | s.name || ' ' || s.surname AS student_name,
|
|---|
| 40 | EXTRACT(YEAR FROM ss.enrollment_date) AS enrollment_year,
|
|---|
| 41 | AVG(ss.final_grade) AS cumulative_gpa,
|
|---|
| 42 | RANK() OVER (
|
|---|
| 43 | PARTITION BY EXTRACT(YEAR FROM ss.enrollment_date)
|
|---|
| 44 | ORDER BY AVG(ss.final_grade) DESC
|
|---|
| 45 | ) as gpa_rank
|
|---|
| 46 | FROM student s
|
|---|
| 47 | JOIN student_subject ss ON s.id = ss.student_id
|
|---|
| 48 | WHERE ss.final_grade IS NOT NULL
|
|---|
| 49 | GROUP BY s.studentindex, s.name, s.surname, EXTRACT(YEAR FROM ss.enrollment_date)
|
|---|
| 50 | )
|
|---|
| 51 | SELECT
|
|---|
| 52 | enrollment_year,
|
|---|
| 53 | studentindex,
|
|---|
| 54 | student_name,
|
|---|
| 55 | cumulative_gpa
|
|---|
| 56 | FROM StudentGPA
|
|---|
| 57 | WHERE gpa_rank = 1
|
|---|
| 58 | ORDER BY enrollment_year DESC; |
|---|