| 155 | |
| 156 | == Прикажи ги корисниците со најголем број на трансфери на пари(број на с-ка, корисничко име, e-mail, број на трансфери и ранг во растечки редослед) |
| 157 | |
| 158 | {{{ |
| 159 | WITH transfer_frequency AS ( |
| 160 | SELECT t.s_id AS account_id, COUNT(*) AS transfer_count |
| 161 | FROM transfer t |
| 162 | GROUP BY t.s_id |
| 163 | |
| 164 | UNION ALL |
| 165 | |
| 166 | SELECT t.r_id AS account_id, COUNT(*) AS transfer_count |
| 167 | FROM transfer t |
| 168 | GROUP BY t.r_id |
| 169 | ) |
| 170 | |
| 171 | SELECT * |
| 172 | FROM ( |
| 173 | SELECT a.id AS account_id, |
| 174 | a.username, |
| 175 | a.email, |
| 176 | tf.transfer_count, |
| 177 | RANK() OVER (ORDER BY tf.transfer_count DESC) AS transfer_rank |
| 178 | FROM account a |
| 179 | JOIN transfer_frequency tf ON a.id = tf.account_id |
| 180 | ) ranked_accounts |
| 181 | WHERE transfer_rank <= 3 |
| 182 | ORDER BY transfer_rank; |
| 183 | |
| 184 | |
| 185 | }}} |
| 186 | |
| 187 | == Корисници кои направиле најголеми или примиле најголеми износи на трансфери и вкупен износ на трансфери(број на с-ка, корисничко име, e-mail, вкупен износ на сите трансфери по корисник и ранг на корисник во растечки редослед) |
| 188 | |
| 189 | {{{ |
| 190 | WITH transfer_amount AS ( |
| 191 | SELECT t.s_id AS account_id, SUM(tr.amount) AS total_transfer |
| 192 | FROM transfer t |
| 193 | JOIN "transaction" tr ON t.id = tr.id |
| 194 | GROUP BY t.s_id |
| 195 | |
| 196 | UNION ALL |
| 197 | |
| 198 | SELECT t.r_id AS account_id, SUM(tr.amount) AS total_transfer |
| 199 | FROM transfer t |
| 200 | JOIN "transaction" tr ON t.id = tr.id |
| 201 | GROUP BY t.r_id |
| 202 | ), |
| 203 | |
| 204 | aggregated_transfers AS ( |
| 205 | SELECT account_id, SUM(total_transfer) AS total_transfer_amount |
| 206 | FROM transfer_amount |
| 207 | GROUP BY account_id |
| 208 | ) |
| 209 | |
| 210 | SELECT a.id AS account_id, |
| 211 | a.username, |
| 212 | a.email, |
| 213 | COALESCE(at.total_transfer_amount, 0) AS total_transfer_amount, |
| 214 | RANK() OVER (ORDER BY COALESCE(at.total_transfer_amount, 0) DESC) AS transfer_rank |
| 215 | FROM account a |
| 216 | LEFT JOIN aggregated_transfers at ON a.id = at.account_id |
| 217 | ORDER BY transfer_rank |
| 218 | LIMIT 3; |
| 219 | }}} |
| 220 | |
| 221 | == Корисници со највисок износ на депозити |
| 222 | |
| 223 | {{{ |
| 224 | |
| 225 | WITH deposit_totals AS ( |
| 226 | SELECT account_id, SUM(amount) AS total_deposit |
| 227 | FROM deposit |
| 228 | GROUP BY account_id |
| 229 | ) |
| 230 | |
| 231 | SELECT a.id AS account_id, |
| 232 | a.username, |
| 233 | a.email, |
| 234 | COALESCE(dt.total_deposit, 0) AS total_deposit, |
| 235 | RANK() OVER (ORDER BY COALESCE(dt.total_deposit, 0) DESC) AS deposit_rank |
| 236 | FROM account a |
| 237 | LEFT JOIN deposit_totals dt ON a.id = dt.account_id |
| 238 | ORDER BY deposit_rank |
| 239 | LIMIT 3; |
| 240 | }}} |
| 241 | |
| 242 | |
| 243 | == Најактивните корисници во последните 30 дена |
| 244 | {{{ |
| 245 | WITH recent_activity AS ( |
| 246 | SELECT account_id, COUNT(*) AS activity_count |
| 247 | FROM "transaction" |
| 248 | WHERE timestamp >= NOW() - INTERVAL '30 days' |
| 249 | GROUP BY account_id |
| 250 | ) |
| 251 | |
| 252 | SELECT a.id AS account_id, |
| 253 | a.username, |
| 254 | a.email, |
| 255 | COALESCE(ra.activity_count, 0) AS recent_transactions |
| 256 | FROM account a |
| 257 | LEFT JOIN recent_activity ra ON a.id = ra.account_id |
| 258 | ORDER BY recent_transactions DESC |
| 259 | LIMIT :top_n; |
| 260 | |
| 261 | |
| 262 | |
| 263 | }}} |
| 264 | |