SQL SUM函数计算异常解决:椅子月度销售额统计问题
修复月度销售额视图的分组错误
你的代码出现问题的核心原因是GROUP BY子句的分组字段错误:你将明细级别的字段(quantity、unit_price、sale_date)和数据表中不存在的article字段加入了分组条件,这会让数据库按每一条单独的销售记录进行分组,而非按年月维度汇总,导致SUM函数无法正确累加同一年月的销售额。
修复后的代码
CREATE VIEW MONTHLY_SALES(product, monthly_sales, month, year) AS ( SELECT product, SUM(quantity * unit_price) AS monthly_sales, TO_CHAR(sale_date, 'Month') AS month, EXTRACT(YEAR FROM sale_date) AS year FROM sales WHERE sale_date BETWEEN '2000-01-01' AND '2010-12-31' AND product = 'CHAIR' GROUP BY product, TO_CHAR(sale_date, 'Month'), EXTRACT(YEAR FROM sale_date) ); SELECT * FROM MONTHLY_SALES;
关键修改说明
- 仅保留需要分组的维度:
product(虽然已通过WHERE筛选固定值,但保留可提升代码严谨性)、格式化后的月份、提取的年份,确保每个唯一的「年月」组合作为一个独立分组。 - 移除了原代码中破坏分组逻辑的明细字段(
quantity、unit_price、sale_date)和无效字段article,让SUM(quantity * unit_price)能够正确累加同一分组内的所有销售额。
验证结果
使用你提供的示例数据执行修复后的代码,会得到预期输出:
product | monthly_sales | month | year Chair 160 January 2001 Chair 200 February 2001
内容的提问来源于stack exchange,提问作者ENV
相关产品推荐
相关产品推荐

