select ca_state,
       cd_gender,
       cd_marital_status,
       cd_dep_count,
       count(*) cnt1,
       min(cd_dep_count),
       max(cd_dep_count),
       avg(cd_dep_count),
       cd_dep_employed_count,
       count(*) cnt2,
       min(cd_dep_employed_count),
       max(cd_dep_employed_count),
       avg(cd_dep_employed_count),
       cd_dep_college_count,
       count(*) cnt3,
       min(cd_dep_college_count),
       max(cd_dep_college_count),
       avg(cd_dep_college_count)
from customer c,
     customer_address ca,
     customer_demographics
where c.c_current_addr_sk = ca.ca_address_sk
  and cd_demo_sk = c.c_current_cdemo_sk
  and exists(select *
             from store_sales,
                  date_dim
             where c.c_customer_sk = ss_customer_sk
               and ss_sold_date_sk = d_date_sk
               and d_year = 2002
               and d_qoy < 4)
  and (exists(select *
              from web_sales,
                   date_dim
              where c.c_customer_sk = ws_bill_customer_sk
                and ws_sold_date_sk = d_date_sk
                and d_year = 2002
                and d_qoy < 4) or
       exists(select *
              from catalog_sales,
                   date_dim
              where c.c_customer_sk = cs_ship_customer_sk
                and cs_sold_date_sk = d_date_sk
                and d_year = 2002
                and d_qoy < 4))
group by ca_state,
         cd_gender,
         cd_marital_status,
         cd_dep_count,
         cd_dep_employed_count,
         cd_dep_college_count
order by ca_state,
         cd_gender,
         cd_marital_status,
         cd_dep_count,
         cd_dep_employed_count,
         cd_dep_college_count limit 100
