WITH  my_customers  AS
    (SELECT  DISTINCT  c_customer_sk,
                                      c_current_addr_sk
      FROM
          (SELECT  cs_sold_date_sk  sold_date_sk,
                          cs_bill_customer_sk  customer_sk,
                          cs_item_sk  item_sk
            FROM  catalog_sales
            UNION  ALL  SELECT  ws_sold_date_sk  sold_date_sk,
                                              ws_bill_customer_sk  customer_sk,
                                              ws_item_sk  item_sk
            FROM  web_sales)  cs_or_ws_sales,
                item,
                date_dim,
                customer
      WHERE  sold_date_sk  =  d_date_sk
          AND  item_sk  =  i_item_sk
          AND  i_category  =  'Women'
          AND  i_class  =  'maternity'
          AND  c_customer_sk  =  cs_or_ws_sales.customer_sk
          AND  d_moy  =  12
          AND  d_year  =  1998  ),
          my_revenue  AS
    (SELECT  c_customer_sk,
                    sum(ss_ext_sales_price)  AS  revenue
      FROM  my_customers,
                store_sales,
                customer_address,
                store,
                date_dim
      WHERE  c_current_addr_sk  =  ca_address_sk
          AND  ca_county  =  s_county
          AND  ca_state  =  s_state
          AND  ss_sold_date_sk  =  d_date_sk
          AND  c_customer_sk  =  ss_customer_sk
          AND  d_month_seq  BETWEEN
              (SELECT  DISTINCT  d_month_seq+1
                FROM  date_dim
                WHERE  d_year  =  1998
                    AND  d_moy  =  12)  AND
              (SELECT  DISTINCT  d_month_seq+3
                FROM  date_dim
                WHERE  d_year  =  1998
                    AND  d_moy  =  12)
      GROUP  BY  c_customer_sk),
          segments  AS
    (SELECT  cast(round(revenue/50)  AS  int)  AS  SEGMENT
      FROM  my_revenue)
SELECT  SEGMENT,
              count(*)  AS  num_customers,
              SEGMENT*50  AS  segment_base
FROM  segments
GROUP  BY  SEGMENT
ORDER  BY  SEGMENT  NULLS  FIRST,
                  num_customers  NULLS  FIRST,
                  segment_base
LIMIT  100;