如何修改SQL查询以获取各门店自2019年初以来的销售总额?
解决多门店年初至今销售总额查询问题
你的问题很典型——原来的查询因为加了branch_id like '%London%'的过滤条件,只会返回伦敦门店的数据,而且还缺少分组逻辑,导致无法按门店单独计算总额。咱们一步步修改:
核心问题分析
- 过滤条件限制:
WHERE branch_id like '%London%'会把所有非伦敦的门店数据排除在外,这就是你看不到曼彻斯特、加的夫等门店结果的直接原因。 - 缺少分组聚合:没有
GROUP BY子句的话,SUM(cost_order)会把所有符合条件的行(伦敦门店的所有订单)加总成一个单一值,而不是按每个门店分别计算总额。
修改后的查询语句
SELECT branch_id, SUM(cost_order) AS total_sales_since_2019 FROM Customer_Orders WHERE date_sale >= '2019-01-01' GROUP BY branch_id;
关键修改点说明
- 移除门店过滤条件:删掉
branch_id like '%London%',让查询覆盖数据库中所有门店的订单数据。 - 添加
GROUP BY branch_id:这是按门店分组的核心,确保SUM(cost_order)会针对每个branch_id单独计算累计销售额,每个门店返回一行独立结果。 - 添加列别名:给
SUM(cost_order)起了total_sales_since_2019的别名,让查询结果的列名更清晰易懂。 - 移除多余的
date_sale字段:原来的查询中date_sale放在SELECT里没有实际意义——我们要的是累计总额,不是单条订单的日期。如果保留它,要么会触发SQL语法错误(比如开启了ONLY_FULL_GROUP_BY模式的数据库),要么会返回随机的订单日期,这不是你需要的结果。
可选扩展:显示统计时间范围
如果你想在结果中明确展示统计的时间区间,可以调整查询如下:
SELECT branch_id, '2019-01-01' AS period_start_date, MAX(date_sale) AS latest_sale_date, SUM(cost_order) AS total_sales_since_2019 FROM Customer_Orders WHERE date_sale >= '2019-01-01' GROUP BY branch_id;
这个版本会额外显示统计的起始日期和该门店的最新销售日期,让结果信息更完整。
内容的提问来源于stack exchange,提问作者Josh Walls
相关产品推荐
相关产品推荐

