MySQL:如何计算指定日期区间内各产品的销售额差值
计算产品两日销售额差值的SQL方案
针对筛选2023-10-06与2023-10-07记录、计算各产品两日销售额差值的需求,替代GROUP_CONCAT的可行方案有两种:
方法一:条件聚合(简洁高效)
通过CASE语句分别提取两天的销售额,直接完成差值计算:
SELECT product_id, SUM(CASE WHEN date = '2023-10-07' THEN total_sales ELSE 0 END) - SUM(CASE WHEN date = '2023-10-06' THEN total_sales ELSE 0 END) AS sales_difference FROM product_daily WHERE date IN ('2023-10-06', '2023-10-07') GROUP BY product_id;
该方案会自动处理单日期缺失的情况——若某产品仅存在其中一天的销售额数据,缺失日期的销售额将按0计算。
方法二:自连接
将两天的数据通过product_id关联,直接计算对应销售额的差值:
SELECT t1.product_id, t2.total_sales - t1.total_sales AS sales_difference FROM product_daily t1 JOIN product_daily t2 ON t1.product_id = t2.product_id AND t1.date = '2023-10-06' AND t2.date = '2023-10-07';
注意:此方案仅返回两天均有记录的产品,若某产品缺失其中一天的数据会被过滤。
结果验证
用你提供的示例数据测试,两种方案均会得到期望结果:
| product_id | sales_difference |
|---|---|
| 1 | 7 |
| 2 | 4 |
内容的提问来源于stack exchange,提问作者Perfection
相关产品推荐
相关产品推荐

