SQL如何对表行按产品分组求和并生成独立汇总表
实现方案
核心逻辑说明
你需要的是按产品维度聚合求和的结果,不需要保留原表的明细行,直接用GROUP BY分组聚合即可,比窗口函数OVER更适配这个场景。窗口函数会保留原表的所有行数,无法直接得到每个产品对应一行的聚合结果,除非额外去重,性能更低。
1. 仅查询汇总结果(不生成物理表)
直接执行以下SQL即可得到你需要的输出格式:
SELECT Product, SUM(Price) AS Total_price FROM 替换为你的原表名 GROUP BY Product;
2. 生成独立的永久存储汇总表
不同数据库的语法略有差异:
- MySQL、PostgreSQL等通用写法:
CREATE TABLE product_total_price AS SELECT Product, SUM(Price) AS Total_price FROM 替换为你的原表名 GROUP BY Product;
- SQL Server 专属写法:
SELECT Product, SUM(Price) AS Total_price INTO product_total_price FROM 替换为你的原表名 GROUP BY Product;
3. 生成临时汇总表(仅当前会话有效,会话关闭自动删除)
- MySQL、PostgreSQL写法:
CREATE TEMPORARY TABLE temp_product_total AS SELECT Product, SUM(Price) AS Total_price FROM 替换为你的原表名 GROUP BY Product;
- SQL Server写法:
SELECT Product, SUM(Price) AS Total_price INTO #temp_product_total FROM 替换为你的原表名 GROUP BY Product;
补充:窗口函数的适配写法(不推荐)
如果必须使用OVER窗口函数实现,需要额外加DISTINCT去重,性能比GROUP BY差,示例如下:
SELECT DISTINCT Product, SUM(Price) OVER(PARTITION BY Product) AS Total_price FROM 替换为你的原表名;
内容的提问来源于stack exchange,提问作者sprite
相关产品推荐
相关产品推荐

