| | 100 | '''Топ клиенти''' \\ |
| | 101 | Креираме прашалник каде велиме "да се пресмета колку трошел секој клиент вкупно,\\ |
| | 102 | и да се сортира според таа сума,на крај да ги врати ги првите 5" : \\ |
| | 103 | \\ |
| | 104 | {{{#!sql |
| | 105 | SELECT |
| | 106 | c.first_name || ' ' || c.last_name AS label, |
| | 107 | SUM(o.total_price) AS total_spent |
| | 108 | FROM orders o |
| | 109 | JOIN customers c ON o.id_customer = c.id_customer |
| | 110 | GROUP BY c.first_name, c.last_name |
| | 111 | ORDER BY total_spent DESC |
| | 112 | LIMIT 5; |
| | 113 | \\ |
| | 114 | Функцијата {{{top_clients}}} претставена со релациска алгебра, каде што имаме: \\ |
| | 115 | ⨝ врска : {{{JOIN}}} меѓу {{{orders}}} и {{{customers}}} \\ |
| | 116 | γ врска : групирање по {{{first_name}}} и {{{last_name}}} и собирање на {{{SUM(total_price)}}} \\ |
| | 117 | ρ врска : преименување на комбинацијата {{{first_name || ' ' || last_name}}} во {{{label}}} \\ |
| | 118 | π врска : проекција на колоните {{{label}}} и {{{total_spent}}} \\ |
| | 119 | τ_desc(...) врска : сортирање по {{{total_spent}}} во опаѓачки редослед \\ |
| | 120 | LIMIT 5 : се применува како пост-процес за враќање на првите 5 записи \\ |
| | 121 | \\ |
| | 122 | {{{#!sql |
| | 123 | π_label, total_spent ( |
| | 124 | τ_desc(total_spent) ( |
| | 125 | ρ(label ← concat(c.first_name, ' ', c.last_name)) ( |
| | 126 | γ_c.first_name, c.last_name; SUM(o.total_price) → total_spent ( |
| | 127 | Orders ⨝ Customers |
| | 128 | ) |
| | 129 | ) |
| | 130 | ) |
| | 131 | ) |
| | 132 | }}} |
| | 133 | \\ |
| | 134 | \\ |
| | 135 | '''Нови регистрации по месец''' \\ |
| | 136 | Креираме прашалник каде велиме "за секој месец, прикажи колку нови корисници се регистрирале" : \\ |
| | 137 | \\ |
| | 138 | {{{#!sql |
| | 139 | SELECT |
| | 140 | TO_CHAR(created_at, 'Mon YYYY') AS label, |
| | 141 | COUNT(*) AS new_users |
| | 142 | FROM customers |
| | 143 | GROUP BY label |
| | 144 | ORDER BY MIN(created_at); |
| | 145 | \\ |
| | 146 | Функцијата {{{new_users}}} претставена со релациска алгебра, каде што имаме: \\ |
| | 147 | γ врска : групирање по {{{TO_CHAR(created_at, 'Mon YYYY')}}} \\ |
| | 148 | ρ врска : преименување на изразот {{{TO_CHAR(...)}}} во {{{label}}} \\ |
| | 149 | π врска : проекција на колоните {{{label}}} и {{{new_users}}} \\ |
| | 150 | τ(...) врска : сортирање според {{{MIN(created_at)}}} порастечки (од најстаро кон најново) \\ |
| | 151 | \\ |
| | 152 | {{{#!sql |
| | 153 | γ_MonthYear(created_at); COUNT(*) → new_users (Customers) |
| | 154 | или |
| | 155 | π_label, new_users ( |
| | 156 | ρ(label ← TO_CHAR(created_at, 'Mon YYYY')) ( |
| | 157 | γ_label; COUNT(*) → new_users (Customers) |
| | 158 | ) |
| | 159 | ) |
| | 160 | |
| | 161 | }}} |
| | 162 | \\ |
| | 163 | \\ |