Changes between Version 1 and Version 2 of BuildPopularity


Ignore:
Timestamp:
01/29/26 03:50:53 (10 days ago)
Author:
233051
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • BuildPopularity

    v1 v2  
    88
    99{{{
     10CREATE OR REPLACE FUNCTION get_report_budget_tier_popularity()
     11    RETURNS TABLE (
     12                      price_tier TEXT,
     13                      builds_count BIGINT,
     14                      avg_favorites NUMERIC,
     15                      avg_rating NUMERIC,
     16                      unique_builders BIGINT,
     17                      engagement_score NUMERIC
     18                  )
     19    LANGUAGE sql
     20AS $$
    1021WITH price_tier_builds AS (
    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'
    2435),
    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     )
    4155SELECT
    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
    5370FROM engagement_stats
    5471ORDER BY engagement_score DESC
    5572LIMIT 15;
     73$$;
    5674}}}
    5775