SELECT sum(ss_net_profit) / sum(ss_ext_sales_price) AS gross_margin, i_category, i_class, grouping(i_category) + grouping(i_class) AS lochierarchy, rank() OVER ( PARTITION BY grouping(i_category) + grouping(i_class), CASE WHEN grouping(i_class) = 0 THEN i_category END ORDER BY sum(ss_net_profit) / sum(ss_ext_sales_price) ASC) AS rank_within_parent FROM store_sales, date_dim d1, item, store WHERE d1.d_year = 2001 AND d1.d_date_sk = ss_sold_date_sk AND i_item_sk = ss_item_sk AND s_store_sk = ss_store_sk AND s_state IN ('TN', 'TN', 'TN', 'TN', 'TN', 'TN', 'TN', 'TN') GROUP BY ROLLUP (i_category, i_class) ORDER BY lochierarchy DESC , CASE WHEN lochierarchy = 0 THEN i_category END , rank_within_parent LIMIT 100