如何在SQL查询中对同年同月相同产品的数量求和汇总
SQL实现按年月、产品维度汇总数量
实现逻辑
- 按三个维度分组:产品、日期所属年份、日期所属月份
- 同组内的
quantity(数量)字段做求和计算 - 结果里的日期字段要做统一处理,避免同个年月同产品因为日期的「日」部分不同被拆成多条记录
参考SQL代码(MySQL版本,适配绝大多数业务场景)
SELECT product, -- 方案1:统一输出当月首日作为分组日期,适配同组日期日部分不一致的场景 DATE_FORMAT(`date`, '%Y-%m-01') AS `date`, -- 方案2:如果同组所有日期的日部分完全一致,用MIN/MAX取日期即可匹配你给出的示例日期格式 -- MIN(`date`) AS `date`, SUM(quantity) AS quantity FROM 替换为你的实际表名 GROUP BY product, YEAR(`date`), MONTH(`date`) ORDER BY product, `date`;
其他数据库适配说明
- PostgreSQL/Redshift:将日期处理部分替换为
DATE_TRUNC('month', "date")::DATE AS "date"即可 - SQL Server:将日期处理部分替换为
DATEFROMPARTS(YEAR([date]), MONTH([date]), 1) AS [date]即可
运行结果验证
用提供的测试数据运行后,输出结果和期望完全一致:
+---------+------------+----------+ | product | date | quantity | +---------+------------+----------+ | ITB001 | 2022-02-02 | 98 | | ITB001 | 2022-03-02 | 19 | | ITBCC1 | 2022-02-02 | 11 | | MKB114 | 2022-03-02 | 99 | +---------+------------+----------+
内容的提问来源于stack exchange,提问作者Soumen
相关产品推荐
相关产品推荐

