| | 1 | = Напредни извештаи од базата = |
| | 2 | |
| | 3 | == 1. Промет по курс == |
| | 4 | |
| | 5 | '''Опис:''' Извештајот го прикажува вкупниот промет генериран од сите плаќања за секоја верзија на секој курс, филтриран по корисник и јазик на превод. |
| | 6 | |
| | 7 | '''SQL:''' |
| | 8 | {{{ |
| | 9 | SELECT |
| | 10 | c.id AS course_id, |
| | 11 | ct.title_short AS course_title, |
| | 12 | cv.version_number AS course_version, |
| | 13 | cv.active AS is_active, |
| | 14 | SUM(p.amount) AS total_amount |
| | 15 | FROM course c |
| | 16 | JOIN course_translate ct ON c.id = ct.course_id |
| | 17 | JOIN course_version cv ON c.id = cv.course_id |
| | 18 | JOIN enrollment e ON e.course_version_id = cv.id |
| | 19 | JOIN payment p ON p.enrollment_id = e.id |
| | 20 | WHERE e.user_id = :user_id |
| | 21 | AND ct.language = :language |
| | 22 | GROUP BY |
| | 23 | c.id, |
| | 24 | ct.title_short, |
| | 25 | cv.version_number; |
| | 26 | }}} |
| | 27 | |
| | 28 | '''Параметри:''' |
| | 29 | * user_id: ИД на корисникот |
| | 30 | * language: јазик за превод |
| | 31 | |
| | 32 | '''Релациона алгебра:''' |
| | 33 | {{{ |
| | 34 | π course_id←c.id, course_title←ct.title_short, course_version←cv.version_number, is_active←cv.active, total_amount←SUM(p.amount) ( |
| | 35 | γ c.id, ct.title_short, cv.version_number, cv.active; SUM(p.amount) ( |
| | 36 | σ e.user_id = :user_id ∧ ct.language = :language ( |
| | 37 | course ⋈ c.id = ct.course_id course_translate |
| | 38 | ⋈ c.id = cv.course_id course_version |
| | 39 | ⋈ cv.id = e.course_version_id enrollment |
| | 40 | ⋈ e.id = p.enrollment_id payment |
| | 41 | ) |
| | 42 | ) |
| | 43 | ) |
| | 44 | }}} |
| | 45 | |
| | 46 | ---- |
| | 47 | |
| | 48 | == 2. Промет по месец == |
| | 49 | |
| | 50 | '''Опис:''' Извештајот го прикажува вкупниот промет групиран по година и месец, сортиран од најнов кон најстар период. |
| | 51 | |
| | 52 | '''SQL:''' |
| | 53 | {{{ |
| | 54 | SELECT |
| | 55 | EXTRACT(YEAR FROM p.payment_date) AS year, |
| | 56 | EXTRACT(MONTH FROM p.payment_date) AS month, |
| | 57 | SUM(p.amount) AS total_revenue |
| | 58 | FROM payment p |
| | 59 | GROUP BY |
| | 60 | EXTRACT(YEAR FROM p.payment_date), |
| | 61 | EXTRACT(MONTH FROM p.payment_date) |
| | 62 | ORDER BY |
| | 63 | year DESC, |
| | 64 | month DESC; |
| | 65 | }}} |
| | 66 | |
| | 67 | '''Релациона алгебра:''' |
| | 68 | {{{ |
| | 69 | τ year DESC, month DESC ( |
| | 70 | π year←EXTRACT(YEAR FROM payment_date), month←EXTRACT(MONTH FROM payment_date), total_revenue←SUM(amount) ( |
| | 71 | γ EXTRACT(YEAR FROM payment_date), EXTRACT(MONTH FROM payment_date); SUM(amount) ( |
| | 72 | payment |
| | 73 | ) |
| | 74 | ) |
| | 75 | ) |
| | 76 | }}} |
| | 77 | |
| | 78 | ---- |
| | 79 | |
| | 80 | == 3. Најпопуларни курсеви според оценка == |
| | 81 | |
| | 82 | '''Опис:''' Извештајот ги прикажува сите курсеви со нивните верзии, вкупен број на запишувања, просечна оценка и вкупен број на рецензии, сортирани по најдобра просечна оценка. |
| | 83 | |
| | 84 | '''SQL:''' |
| | 85 | {{{ |
| | 86 | SELECT |
| | 87 | c.id AS course_id, |
| | 88 | ct.title_short AS course_title, |
| | 89 | cv.version_number AS course_version, |
| | 90 | cv.active AS is_active, |
| | 91 | COUNT(DISTINCT e.id) AS total_enrollments, |
| | 92 | SUM(r.rating) / COUNT(r.id) AS average_rating, |
| | 93 | COUNT(r.id) AS total_reviews |
| | 94 | FROM course c |
| | 95 | JOIN course_translate ct ON c.id = ct.course_id |
| | 96 | JOIN course_version cv ON c.id = cv.course_id |
| | 97 | JOIN enrollment e ON cv.id = e.course_version_id |
| | 98 | JOIN review r ON e.id = r.enrollment_id |
| | 99 | WHERE ct.language = :language |
| | 100 | GROUP BY c.id, ct.id, cv.id |
| | 101 | ORDER BY SUM(r.rating) / COUNT(r.id) DESC |
| | 102 | }}} |
| | 103 | |
| | 104 | '''Параметри:''' |
| | 105 | * language: јазик за превод |
| | 106 | |
| | 107 | '''Релациона алгебра:''' |
| | 108 | {{{ |
| | 109 | τ average_rating DESC ( |
| | 110 | π course_id←c.id, course_title←ct.title_short, course_version←cv.version_number, is_active←cv.active, |
| | 111 | total_enrollments←COUNT(DISTINCT e.id), average_rating←SUM(r.rating)/COUNT(r.id), total_reviews←COUNT(r.id) ( |
| | 112 | γ c.id, ct.id, cv.id; COUNT(DISTINCT e.id), SUM(r.rating), COUNT(r.id) ( |
| | 113 | σ ct.language = :language ( |
| | 114 | course ⋈ c.id = ct.course_id course_translate |
| | 115 | ⋈ c.id = cv.course_id course_version |
| | 116 | ⋈ cv.id = e.course_version_id enrollment |
| | 117 | ⋈ e.id = r.enrollment_id review |
| | 118 | ) |
| | 119 | ) |
| | 120 | ) |
| | 121 | ) |
| | 122 | }}} |
| | 123 | |
| | 124 | ---- |