--\timing
--explain (analyze, buffers)
WITH base AS (
SELECT
    order_season
    ,order_month
    ,version
    ,iter
    ,part_descr
    ,bill_cust_descr
    ,ship_cust_descr
    ,SUM(units) units
    ,SUM(value_usd) value_usd
FROM
    rlarp.osm_fcpool
WHERE
    quota_rep_descr = '90005 - MARK WILKINSON'
    AND segm = 'Retail'
    AND mod_chan = 'MASS'
    AND order_month = 'May'
GROUP BY
    order_season
    ,order_month
    ,version
    ,iter
    ,part_descr
    ,bill_cust_descr
    ,ship_cust_descr
)
,months AS (
    SELECT
        order_season
        ,version
        ,iter
        ,order_month
        ,sum(units) units
        ,sum(value_usd) value_usd
    FROM
        base
    GROUP BY
        order_season
        ,version
        ,iter
        ,order_month
)
,totals AS (
    SELECT
        order_season
        ,version
        ,iter
        ,sum(units) units
        ,sum(value_usd) value_usd
    FROM
        months
    GROUP BY
        order_season
        ,version
        ,iter
)
SELECT 
    jsonb_build_object(
        'months'
        ,(SELECT jsonb_agg(row_to_json(months)::jsonb) FROM months)
    ) 
    ,jsonb_build_object(
        'base'
        ,(SELECT jsonb_agg(row_to_json(base)::jsonb) FROM base)
    )
    ,jsonb_build_object(
        'totals'
        ,(SELECT jsonb_agg(row_to_json(totals)::jsonb) FROM totals)
    )