/* 需要注意在 sum(sales_amount) as total_sales_amount, (sum(sales_amount) - sum(cost_amount)) / sum(sales_amount) as profit_rate 这部分为sum(sales_amount)指定的别名不能为sales_amount,最外层的查询再次指定为sales_amount即可 */ select product_id, product_name, category_id, total_sales_amount as sales_amount, round(profit_rate, 2) as profit_rate from ( select p.product_id, product_name, category_id, total_sales_amount, profit_rate, rank() over(partition by category_id order by total_sales_amount desc) as ranking from product_category as p left join ( select product_id, sum(sales_amount) as total_sales_amount, (sum(sales_amount) - sum(cost_amount)) / sum(sales_amount) as profit_rate from sales_and_profit group by product_id ) as s on p.product_id=s.product_id ) as ranking_tb where profit_rate > 0.3 and ranking < 4 order by category_id, sales_amount desc, product_id