== UC005 - Приказ на предмети по семестар '''Иницијален актер:''' Студент '''Други актери:''' - Студентот сака да ги види предметите кои ги слуша во одреден запишан семестар, со професорот, кредитите, потписот и оценката доколку предметот е положен. === Сценарио 1. Студентот ја отвора страницата '''Предмети''' или избира семестар од [wiki:UseCase004 UC004]. 2. Системот ги презема предметите на избраниот запишан семестар. Оценката е LEFT JOIN, бидејќи предметите кои сè уште не се положени немаат ред во passed_subjects. {{{#!sql SELECT s.code, s.name AS subject, s.awarded_credits, ss.signature, p.name || ' ' || p.surname AS professor, ps.grade, ps.date_passed FROM project.semesters_subjects ss JOIN project.subjects s ON s.id = ss.subjects_id JOIN project.users p ON p.id = ss.professor_id LEFT JOIN project.passed_subjects ps ON ps.enrolled_id = ss.id WHERE ss.enrolled_semesters_id = 1 ORDER BY s.name; }}} 3. Системот го пресметува бројот на потписи и освоените кредити во тој семестар. {{{#!sql SELECT count(*) FILTER (WHERE ss.signature) AS signatures, count(*) AS total_subjects, coalesce(sum(s.awarded_credits) FILTER (WHERE ps.id IS NOT NULL), 0) AS earned_credits FROM project.semesters_subjects ss JOIN project.subjects s ON s.id = ss.subjects_id LEFT JOIN project.passed_subjects ps ON ps.enrolled_id = ss.id WHERE ss.enrolled_semesters_id = 1; }}} 4. Системот ја прикажува табелата со предметите и резимето со потписи и кредити. === Забелешки * Ограничувањето UNIQUE (enrolled_semesters_id, subjects_id) гарантира дека ист предмет не може да се појави двапати во ист запишан семестар. * Предуслови за предметите се чуваат во dependency_subject и можат да се прикажат дополнително.