PostgreSQL:如何用TOP N产品总销售额筛选并按地区分组统计
解决方案
当然可以,以下两种方法都能实现需求,且只需修改一处数字就能调整TOP产品数量:
方法1:子查询嵌套
直接把获取TOP产品的查询作为IN的条件,无需手动复制产品名称:
SELECT Product, Region, sum(sales) totSalesByRegion FROM drug_data.sales_data WHERE Product IN ( SELECT Product FROM drug_data.sales_data GROUP BY Product ORDER BY sum(sales) DESC LIMIT 5 -- 改这里的数字就能调整TOP数量 ) GROUP BY Product, Region ORDER BY totSalesByRegion DESC;
方法2:CTE(公共表表达式)
如果你的数据库支持CTE(比如PostgreSQL、MySQL 8.0+、SQL Server),这种写法可读性更强:
WITH top_products AS ( SELECT Product FROM drug_data.sales_data GROUP BY Product ORDER BY sum(sales) DESC LIMIT 5 -- 调整此处数字即可改变TOP产品数量 ) SELECT s.Product, s.Region, sum(s.sales) totSalesByRegion FROM drug_data.sales_data s JOIN top_products tp ON s.Product = tp.Product GROUP BY s.Product, s.Region ORDER BY totSalesByRegion DESC;
两种方法都能自动筛选出指定数量的TOP产品,并统计它们的各地区销售额,完全省去手动维护产品列表的步骤。
内容的提问来源于stack exchange,提问作者Andrew Staroscik
相关产品推荐
相关产品推荐

