| | 1 | = Complex DB Reports (SQL, Stored Procedures, Relational Algebra) |
| | 2 | |
| | 3 | == Sitter Performance |
| | 4 | This SQL query wants to evaluate and rank pet sitters to find the top performers. A top performer is a sitter who completes bookings in a reliable way, has high ratings and generates high revenue. |
| | 5 | This SQL query: |
| | 6 | |
| | 7 | * Analyzes the bookings by counting total, completed and missed bookings |
| | 8 | * Calculates total money generated from completed bookings only |
| | 9 | * Evaluates quality by finding average customer ratings from reviews table |
| | 10 | * Ranks the sitters using a custom weighted performance score - valuing money, completed bookings and high ratings. |
| | 11 | |
| | 12 | === SQL |
| | 13 | {{{#!sql |
| | 14 | WITH params AS ( |
| | 15 | SELECT |
| | 16 | CAST(:start_date AS DATE) AS start_date, |
| | 17 | CAST(:end_date AS DATE) AS end_date |
| | 18 | ), |
| | 19 | |
| | 20 | sitter_stats AS ( |
| | 21 | SELECT |
| | 22 | b.sitter_id, |
| | 23 | COUNT(b.booking_id) AS total_bookings, |
| | 24 | COUNT(b.booking_id) FILTER (WHERE b.status = 'Completed') AS completed_bookings, |
| | 25 | COUNT(b.booking_id) FILTER (WHERE b.status IN ('Canceled', 'Rejected')) AS missed_bookings |
| | 26 | FROM bookings b |
| | 27 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 28 | GROUP BY b.sitter_id |
| | 29 | ), |
| | 30 | |
| | 31 | sitter_financials AS ( |
| | 32 | SELECT |
| | 33 | b.sitter_id, |
| | 34 | SUM(pay.amount) AS total_revenue |
| | 35 | FROM bookings b |
| | 36 | JOIN payments pay ON b.booking_id = pay.booking_id |
| | 37 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 38 | WHERE b.status = 'Completed' |
| | 39 | GROUP BY b.sitter_id |
| | 40 | ), |
| | 41 | |
| | 42 | sitter_ratings AS ( |
| | 43 | SELECT |
| | 44 | b.sitter_id, |
| | 45 | AVG(r.rating)::numeric(10,2) AS avg_rating, |
| | 46 | COUNT(r.review_id) AS total_reviews |
| | 47 | FROM bookings b |
| | 48 | JOIN reviews r ON b.booking_id = r.booking_id |
| | 49 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 50 | GROUP BY b.sitter_id |
| | 51 | ) |
| | 52 | |
| | 53 | SELECT |
| | 54 | u.user_id, |
| | 55 | u.username, |
| | 56 | u.first_name, |
| | 57 | u.last_name, |
| | 58 | COALESCE(ss.total_bookings, 0) AS total_bookings, |
| | 59 | COALESCE(ss.completed_bookings, 0) AS completed_bookings, |
| | 60 | COALESCE(ss.missed_bookings, 0) AS missed_bookings, |
| | 61 | COALESCE(sr.avg_rating, 0) AS avg_rating, |
| | 62 | COALESCE(sr.total_reviews, 0) AS total_reviews, |
| | 63 | COALESCE(sf.total_revenue, 0) AS total_revenue, |
| | 64 | |
| | 65 | ( |
| | 66 | COALESCE(sf.total_revenue, 0) * 0.5 |
| | 67 | + COALESCE(ss.completed_bookings, 0) * 10 |
| | 68 | + COALESCE(sr.avg_rating, 0) * 15 |
| | 69 | - COALESCE(ss.missed_bookings, 0) * 5 |
| | 70 | ) AS sitter_score, |
| | 71 | |
| | 72 | DENSE_RANK() OVER ( |
| | 73 | ORDER BY ( |
| | 74 | COALESCE(sf.total_revenue, 0) * 0.5 |
| | 75 | + COALESCE(ss.completed_bookings, 0) * 10 |
| | 76 | + COALESCE(sr.avg_rating, 0) * 15 |
| | 77 | - COALESCE(ss.missed_bookings, 0) * 5 |
| | 78 | ) DESC, |
| | 79 | COALESCE(sr.avg_rating, 0) DESC |
| | 80 | ) AS sitter_rank |
| | 81 | |
| | 82 | FROM users u |
| | 83 | JOIN pet_sitters ps ON u.user_id = ps.user_id |
| | 84 | LEFT JOIN sitter_stats ss ON ss.sitter_id = ps.user_id |
| | 85 | LEFT JOIN sitter_financials sf ON sf.sitter_id = ps.user_id |
| | 86 | LEFT JOIN sitter_ratings sr ON sr.sitter_id = ps.user_id |
| | 87 | WHERE COALESCE(ss.total_bookings, 0) > 0 |
| | 88 | ORDER BY sitter_rank |
| | 89 | LIMIT 10; |
| | 90 | }}} |
| | 91 | |
| | 92 | === Relational algebra |
| | 93 | {{{ |
| | 94 | Params <- {(start_date, end_date)} |
| | 95 | |
| | 96 | SitterStats <- |
| | 97 | γ |
| | 98 | sitter_id := b.sitter_id; |
| | 99 | total_bookings := COUNT(b.booking_id); |
| | 100 | completed_bookings := COUNT(b.status = 'Completed'); |
| | 101 | missed_bookings := COUNT(b.status = 'Canceled' ∨ b.status = 'Rejected') |
| | 102 | ( |
| | 103 | bookings b ⨝ |
| | 104 | (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) |
| | 105 | Params p |
| | 106 | ) |
| | 107 | |
| | 108 | SitterFinancials <- |
| | 109 | γ |
| | 110 | sitter_id := b.sitter_id; |
| | 111 | total_revenue := SUM(pay.amount) |
| | 112 | ( |
| | 113 | σ b.status = 'Completed' |
| | 114 | ( |
| | 115 | (bookings b ⨝ (b.booking_id = pay.booking_id) payments pay) |
| | 116 | ⨝ (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) Params p |
| | 117 | ) |
| | 118 | ) |
| | 119 | |
| | 120 | SitterRatings <- |
| | 121 | γ |
| | 122 | sitter_id := b.sitter_id; |
| | 123 | avg_rating := AVG(r.rating); |
| | 124 | total_reviews := COUNT(r.review_id) |
| | 125 | ( |
| | 126 | (bookings b ⨝ (b.booking_id = r.booking_id) reviews r) |
| | 127 | ⨝ (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) Params p |
| | 128 | ) |
| | 129 | |
| | 130 | SitterBase <- |
| | 131 | (users u ⨝ (u.user_id = ps.user_id) pet_sitters ps) |
| | 132 | |
| | 133 | MergedData <- |
| | 134 | ( |
| | 135 | ( |
| | 136 | (SitterBase ⟕ (u.user_id = ss.sitter_id) SitterStats ss) |
| | 137 | ⟕ (u.user_id = sf.sitter_id) SitterFinancials sf |
| | 138 | ) |
| | 139 | ⟕ (u.user_id = sr.sitter_id) SitterRatings sr |
| | 140 | ) |
| | 141 | |
| | 142 | ActiveSitters <- |
| | 143 | σ COALESCE(ss.total_bookings, 0) > 0 |
| | 144 | (MergedData) |
| | 145 | |
| | 146 | ScoredSitters <- |
| | 147 | π |
| | 148 | user_id, username, first_name, last_name, |
| | 149 | total_bookings := COALESCE(ss.total_bookings, 0), |
| | 150 | completed_bookings := COALESCE(ss.completed_bookings, 0), |
| | 151 | missed_bookings := COALESCE(ss.missed_bookings, 0), |
| | 152 | avg_rating := COALESCE(sr.avg_rating, 0), |
| | 153 | total_reviews := COALESCE(sr.total_reviews, 0), |
| | 154 | total_revenue := COALESCE(sf.total_revenue, 0), |
| | 155 | sitter_score := ( |
| | 156 | COALESCE(sf.total_revenue, 0) * 0.5 + |
| | 157 | COALESCE(ss.completed_bookings, 0) * 10 + |
| | 158 | COALESCE(sr.avg_rating, 0) * 15 - |
| | 159 | COALESCE(ss.missed_bookings, 0) * 5 |
| | 160 | ) |
| | 161 | (ActiveSitters) |
| | 162 | |
| | 163 | RankedSitters <- |
| | 164 | rank_dense |
| | 165 | sitter_rank := |
| | 166 | ORDER BY |
| | 167 | sitter_score DESC, |
| | 168 | avg_rating DESC |
| | 169 | (ScoredSitters) |
| | 170 | |
| | 171 | Result <- |
| | 172 | topK_{K := 10} |
| | 173 | ( |
| | 174 | τ sitter_rank ASC |
| | 175 | (RankedSitters) |
| | 176 | ) |
| | 177 | }}} |
| | 178 | |
| | 179 | == Highest paying customers |
| | 180 | This SQL query wants to find the platform's most profitable pet owners and discover their primary service interests. |
| | 181 | This query: |
| | 182 | |
| | 183 | * Sums total profit generated from successful bookings |
| | 184 | * Counts canceled bookings to determine customer reliability |
| | 185 | * Discovers the user's top interest by ranking their most frequently booked service types |
| | 186 | * Counts the total number of registered pets per owner |
| | 187 | * Combines everything and ranks customers based on total profit and successful booking volume |
| | 188 | |
| | 189 | === SQL |
| | 190 | {{{#!sql |
| | 191 | WITH params AS ( |
| | 192 | SELECT |
| | 193 | CAST('2020-01-01' AS DATE) AS start_date, |
| | 194 | CAST('2030-01-01' AS DATE) AS end_date |
| | 195 | ), |
| | 196 | |
| | 197 | owner_financials AS ( |
| | 198 | SELECT |
| | 199 | b.owner_id, |
| | 200 | SUM(pay.amount) AS total_profit_generated, |
| | 201 | COUNT(DISTINCT b.booking_id) AS successful_bookings |
| | 202 | FROM bookings b |
| | 203 | JOIN payments pay ON b.booking_id = pay.booking_id |
| | 204 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 205 | WHERE b.status = 'Completed' |
| | 206 | GROUP BY b.owner_id |
| | 207 | ), |
| | 208 | |
| | 209 | owner_activity AS ( |
| | 210 | SELECT |
| | 211 | b.owner_id, |
| | 212 | COUNT(b.booking_id) FILTER (WHERE b.status IN ('Canceled', 'Rejected')) AS canceled_bookings |
| | 213 | FROM bookings b |
| | 214 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 215 | GROUP BY b.owner_id |
| | 216 | ), |
| | 217 | |
| | 218 | service_counts AS ( |
| | 219 | SELECT |
| | 220 | b.owner_id, |
| | 221 | s.type AS service_type, |
| | 222 | COUNT(bs.service_id) AS times_booked, |
| | 223 | ROW_NUMBER() OVER(PARTITION BY b.owner_id ORDER BY COUNT(bs.service_id) DESC) as rank_num |
| | 224 | FROM bookings b |
| | 225 | JOIN booking_services bs ON b.booking_id = bs.booking_id |
| | 226 | JOIN services s ON bs.service_id = s.service_id |
| | 227 | JOIN params p ON b.date_from >= p.start_date AND b.date_from < p.end_date |
| | 228 | GROUP BY b.owner_id, s.type |
| | 229 | ), |
| | 230 | |
| | 231 | favorite_service AS ( |
| | 232 | SELECT |
| | 233 | owner_id, |
| | 234 | service_type AS top_interest |
| | 235 | FROM service_counts |
| | 236 | WHERE rank_num = 1 |
| | 237 | ), |
| | 238 | |
| | 239 | pet_portfolio AS ( |
| | 240 | SELECT |
| | 241 | owner_id, |
| | 242 | COUNT(pet_id) AS registered_pets |
| | 243 | FROM pets |
| | 244 | GROUP BY owner_id |
| | 245 | ) |
| | 246 | |
| | 247 | SELECT |
| | 248 | u.user_id, |
| | 249 | u.first_name, |
| | 250 | u.last_name, |
| | 251 | COALESCE(ofin.successful_bookings, 0) AS successful_bookings, |
| | 252 | COALESCE(oa.canceled_bookings, 0) AS canceled_bookings, |
| | 253 | COALESCE(pp.registered_pets, 0) AS total_pets, |
| | 254 | COALESCE(fs.top_interest, 'Unknown') AS top_interest, |
| | 255 | COALESCE(ofin.total_profit_generated, 0) AS total_profit_generated, |
| | 256 | |
| | 257 | DENSE_RANK() OVER ( |
| | 258 | ORDER BY |
| | 259 | COALESCE(ofin.total_profit_generated, 0) DESC, |
| | 260 | COALESCE(ofin.successful_bookings, 0) DESC |
| | 261 | ) AS customer_rank |
| | 262 | |
| | 263 | FROM users u |
| | 264 | JOIN pet_owners po ON u.user_id = po.user_id |
| | 265 | LEFT JOIN owner_financials ofin ON po.user_id = ofin.owner_id |
| | 266 | LEFT JOIN owner_activity oa ON po.user_id = oa.owner_id |
| | 267 | LEFT JOIN favorite_service fs ON po.user_id = fs.owner_id |
| | 268 | LEFT JOIN pet_portfolio pp ON po.user_id = pp.owner_id |
| | 269 | WHERE COALESCE(ofin.successful_bookings, 0) > 0 |
| | 270 | ORDER BY customer_rank |
| | 271 | LIMIT 10; |
| | 272 | }}} |
| | 273 | |
| | 274 | === Relational algebra |
| | 275 | {{{ |
| | 276 | Params <- {(start_date, end_date)} |
| | 277 | |
| | 278 | OwnerFinancials <- |
| | 279 | γ |
| | 280 | owner_id := b.owner_id; |
| | 281 | total_profit := SUM(pay.amount); |
| | 282 | successful := COUNT_DISTINCT(b.booking_id) |
| | 283 | ( |
| | 284 | σ b.status = 'Completed' |
| | 285 | ( |
| | 286 | (bookings b ⨝ (b.booking_id = pay.booking_id) payments pay) |
| | 287 | ⨝ (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) Params p |
| | 288 | ) |
| | 289 | ) |
| | 290 | |
| | 291 | OwnerActivity <- |
| | 292 | γ |
| | 293 | owner_id := b.owner_id; |
| | 294 | canceled := COUNT(b.status = 'Canceled' ∨ b.status = 'Rejected') |
| | 295 | ( |
| | 296 | bookings b ⨝ (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) Params p |
| | 297 | ) |
| | 298 | |
| | 299 | ServiceCounts <- |
| | 300 | γ |
| | 301 | owner_id := b.owner_id; |
| | 302 | service_type := s.type; |
| | 303 | times_booked := COUNT(bs.service_id) |
| | 304 | ( |
| | 305 | ( |
| | 306 | (bookings b ⨝ (b.booking_id = bs.booking_id) booking_services bs) |
| | 307 | ⨝ (bs.service_id = s.service_id) services s |
| | 308 | ) |
| | 309 | ⨝ (b.date_from ≥ p.start_date ∧ b.date_from < p.end_date) Params p |
| | 310 | ) |
| | 311 | |
| | 312 | RankedServices <- |
| | 313 | rank_row_number |
| | 314 | rank_num := |
| | 315 | ORDER BY times_booked DESC |
| | 316 | PARTITION BY owner_id |
| | 317 | (ServiceCounts) |
| | 318 | |
| | 319 | FavoriteService <- |
| | 320 | π |
| | 321 | owner_id, |
| | 322 | top_interest := service_type |
| | 323 | ( |
| | 324 | σ rank_num = 1 (RankedServices) |
| | 325 | ) |
| | 326 | |
| | 327 | PetPortfolio <- |
| | 328 | γ |
| | 329 | owner_id := owner_id; |
| | 330 | registered_pets := COUNT(pet_id) |
| | 331 | (pets) |
| | 332 | |
| | 333 | OwnerBase <- |
| | 334 | (users u ⨝ (u.user_id = po.user_id) pet_owners po) |
| | 335 | |
| | 336 | MergedData <- |
| | 337 | ( |
| | 338 | ( |
| | 339 | ( |
| | 340 | (OwnerBase ⟕ (u.user_id = ofin.owner_id) OwnerFinancials ofin) |
| | 341 | ⟕ (u.user_id = oa.owner_id) OwnerActivity oa |
| | 342 | ) |
| | 343 | ⟕ (u.user_id = fs.owner_id) FavoriteService fs |
| | 344 | ) |
| | 345 | ⟕ (u.user_id = pp.owner_id) PetPortfolio pp |
| | 346 | ) |
| | 347 | |
| | 348 | ActiveOwners <- |
| | 349 | σ COALESCE(ofin.successful, 0) > 0 |
| | 350 | (MergedData) |
| | 351 | |
| | 352 | ScoredOwners <- |
| | 353 | π |
| | 354 | user_id, first_name, last_name, |
| | 355 | successful_bookings := COALESCE(ofin.successful, 0), |
| | 356 | canceled_bookings := COALESCE(oa.canceled, 0), |
| | 357 | total_pets := COALESCE(pp.registered_pets, 0), |
| | 358 | top_interest := COALESCE(fs.top_interest, 'Unknown'), |
| | 359 | total_profit_generated := COALESCE(ofin.total_profit, 0) |
| | 360 | (ActiveOwners) |
| | 361 | |
| | 362 | RankedOwners <- |
| | 363 | rank_dense |
| | 364 | customer_rank := |
| | 365 | ORDER BY total_profit_generated DESC, successful_bookings DESC |
| | 366 | (ScoredOwners) |
| | 367 | |
| | 368 | Result <- |
| | 369 | topK_{K := 10} |
| | 370 | ( |
| | 371 | τ customer_rank ASC |
| | 372 | (RankedOwners) |
| | 373 | ) |
| | 374 | }}} |