SELECT  *
FROM
    (SELECT  i_category,
                    i_class,
                    i_brand,
                    i_product_name,
                    d_year,
                    d_qoy,
                    d_moy,
                    s_store_id,
                    sumsales,
                    rank()  OVER  (PARTITION  BY  i_category
                                              ORDER  BY  sumsales  DESC)  rk
      FROM
          (SELECT  i_category,
                          i_class,
                          i_brand,
                          i_product_name,
                          d_year,
                          d_qoy,
                          d_moy,
                          s_store_id,
                          sum(coalesce(ss_sales_price*ss_quantity,0))  sumsales
            FROM  store_sales,
                      date_dim,
                      store,
                      item
            WHERE  ss_sold_date_sk=d_date_sk
                AND  ss_item_sk=i_item_sk
                AND  ss_store_sk  =  s_store_sk
                AND  d_month_seq  BETWEEN  1200  AND  1200+11
            GROUP  BY  rollup(i_category,  i_class,  i_brand,  i_product_name,  d_year,  d_qoy,  d_moy,s_store_id))dw1)  dw2
WHERE  rk  <=  100
ORDER  BY  i_category  NULLS  FIRST,
                  i_class  NULLS  FIRST,
                  i_brand  NULLS  FIRST,
                  i_product_name  NULLS  FIRST,
                  d_year  NULLS  FIRST,
                  d_qoy  NULLS  FIRST,
                  d_moy  NULLS  FIRST,
                  s_store_id  NULLS  FIRST,
                  sumsales  NULLS  FIRST,
                  rk  NULLS  FIRST
LIMIT  100;