如何编写SQL查询:获取最高排名行并展示全表销售总额
解决方案
你可以通过以下两种方式实现需求:
方式一:子查询直接获取总额并筛选最高排名行
这种方式最为直接,通过子查询计算全表销售总额,同时筛选出排名最高(RANK=1)的行:
SELECT PRODUCT, LOCATION, WHS, RANK, (SELECT SUM(SALES) FROM your_table) AS SALE, reason FROM your_table WHERE RANK = 1;
方式二:窗口函数同时计算总额和排名(更灵活)
如果需要重新确认或修正排名逻辑(比如确保按销售额降序生成排名),可以用CTE结合窗口函数,同时计算全局总额和分组排名:
WITH processed_data AS ( SELECT PRODUCT, LOCATION, WHS, RANK, SALES, reason, SUM(SALES) OVER () AS total_sales, -- 计算全表销售总额 RANK() OVER (PARTITION BY product, location ORDER BY SALES DESC) AS SRank -- 按产品+地区分区,销售额降序排名 FROM your_table ) SELECT PRODUCT, LOCATION, WHS, RANK, total_sales AS SALE, reason FROM processed_data WHERE SRank = 1;
说明
- 方式一中的子查询
(SELECT SUM(SALES) FROM your_table)会返回整个表的销售总额340,直接替换原SALES列的值。 - 方式二的窗口函数
SUM(SALES) OVER ()同样会计算全局总额,而RANK() OVER (...)可以确保你按正确的逻辑生成排名(如果原表的RANK列逻辑有误,这种方式可以修正)。
内容的提问来源于stack exchange,提问作者CodingLover
相关产品推荐
相关产品推荐

