| 11 | | SELECT |
| 12 | | b.id AS build_id, |
| 13 | | b.user_id, |
| 14 | | b.total_price, |
| 15 | | CASE |
| 16 | | WHEN b.total_price < 500 THEN 'Budget' |
| 17 | | WHEN b.total_price < 1000 THEN 'Mid-Range' |
| 18 | | WHEN b.total_price < 2000 THEN 'High-End' |
| 19 | | ELSE 'Enthusiast' |
| 20 | | END AS price_tier |
| 21 | | FROM build b |
| 22 | | WHERE b.is_approved = TRUE |
| 23 | | AND b.created_at >= CURRENT_DATE - INTERVAL '6 months' |
| | 22 | SELECT |
| | 23 | b.id AS build_id, |
| | 24 | b.user_id, |
| | 25 | b.total_price, |
| | 26 | CASE |
| | 27 | WHEN b.total_price < 500 THEN 'Budget' |
| | 28 | WHEN b.total_price < 1000 THEN 'Mid-Range' |
| | 29 | WHEN b.total_price < 2000 THEN 'High-End' |
| | 30 | ELSE 'Enthusiast' |
| | 31 | END AS price_tier |
| | 32 | FROM build b |
| | 33 | WHERE b.is_approved = TRUE |
| | 34 | AND b.created_at >= CURRENT_DATE - INTERVAL '6 months' |
| 25 | | engagement_stats AS ( |
| 26 | | SELECT |
| 27 | | ptb.price_tier, |
| 28 | | COUNT(ptb.build_id) AS builds_count, |
| 29 | | AVG(fb.favorites_count) AS avg_favorites, |
| 30 | | AVG(rb.value) AS avg_rating, |
| 31 | | COUNT(DISTINCT ptb.user_id) AS unique_builders |
| 32 | | FROM price_tier_builds ptb |
| 33 | | JOIN rating_build rb ON ptb.build_id = rb.build_id |
| 34 | | JOIN ( |
| 35 | | SELECT build_id, COUNT(DISTINCT user_id) AS favorites_count |
| 36 | | FROM favorite_build |
| 37 | | GROUP BY build_id |
| 38 | | ) fb ON ptb.build_id = fb.build_id |
| 39 | | GROUP BY ptb.price_tier |
| 40 | | ) |
| | 36 | favorites AS ( |
| | 37 | SELECT |
| | 38 | build_id, |
| | 39 | COUNT(DISTINCT user_id) AS favorites_count |
| | 40 | FROM favorite_build |
| | 41 | GROUP BY build_id |
| | 42 | ), |
| | 43 | engagement_stats AS ( |
| | 44 | SELECT |
| | 45 | ptb.price_tier, |
| | 46 | COUNT(DISTINCT ptb.build_id) AS builds_count, |
| | 47 | AVG(COALESCE(f.favorites_count, 0)) AS avg_favorites, |
| | 48 | AVG(rb.value) AS avg_rating, |
| | 49 | COUNT(DISTINCT ptb.user_id) AS unique_builders |
| | 50 | FROM price_tier_builds ptb |
| | 51 | LEFT JOIN rating_build rb ON ptb.build_id = rb.build_id |
| | 52 | LEFT JOIN favorites f ON ptb.build_id = f.build_id |
| | 53 | GROUP BY ptb.price_tier |
| | 54 | ) |
| 42 | | price_tier, |
| 43 | | builds_count, |
| 44 | | ROUND(avg_favorites, 1) AS avg_favorites, |
| 45 | | ROUND(avg_rating, 2) AS avg_rating, |
| 46 | | unique_builders, |
| 47 | | ROUND( |
| 48 | | (builds_count * 2) + |
| 49 | | (avg_favorites * 3) + |
| 50 | | (avg_rating * 10) + |
| 51 | | (unique_builders * 1.5), 2 |
| 52 | | ) AS engagement_score |
| | 56 | price_tier, |
| | 57 | builds_count, |
| | 58 | ROUND(CAST(avg_favorites AS numeric), 1) AS avg_favorites, |
| | 59 | ROUND(CAST(COALESCE(avg_rating, 0) AS numeric), 2) AS avg_rating, |
| | 60 | unique_builders, |
| | 61 | ROUND( |
| | 62 | CAST( |
| | 63 | (builds_count * 2) + |
| | 64 | (avg_favorites * 3) + |
| | 65 | (COALESCE(avg_rating, 0) * 10) + |
| | 66 | (unique_builders * 1.5) |
| | 67 | AS numeric), |
| | 68 | 2 |
| | 69 | ) AS engagement_score |