基于月份关联SQL表并汇总usage字段的实现需求
实现按年月分组汇总两表usage字段的SQL方案
核心思路
先通过UNION ALL(需去重则用UNION)合并两张表的目标字段,提取年份、月份后分组求和,以下是适配不同场景的SQL示例:
场景1:日期字段为标准日期类型
假设两张表均包含date_col(标准日期/时间字段)和usage字段:
SELECT EXTRACT(YEAR FROM date_col) AS year, EXTRACT(MONTH FROM date_col) AS month, SUM(usage) AS total_usage FROM ( SELECT date_col, usage FROM table1 UNION ALL SELECT date_col, usage FROM table2 ) AS combined_data GROUP BY year, month ORDER BY year, month;
注:不同数据库的日期提取函数略有差异,比如MySQL可直接用YEAR(date_col)、MONTH(date_col)替代EXTRACT,按需调整即可。
场景2:日期字段为字符串格式(如'2023-10')
若日期是字符串类型,直接截取年月部分即可:
SELECT SUBSTRING(date_str, 1, 4) AS year, SUBSTRING(date_str, 6, 2) AS month, SUM(usage) AS total_usage FROM ( SELECT date_str, usage FROM table1 UNION ALL SELECT date_str, usage FROM table2 ) AS combined_data GROUP BY year, month ORDER BY year, month;
关键说明
UNION ALL会保留所有行,性能优于UNION;若两张表存在重复数据需去重,替换为UNION即可。- 最终结果会按年份、月份升序排列,方便查看时序数据。
内容的提问来源于stack exchange,提问作者Raihan Nisreen
相关产品推荐
相关产品推荐

