SQL求和函数使用咨询:按中心及月份计算列值总和
解决按日期范围计算各中心X列全国总和的SQL方案
嘿,作为SQL新手完全不用慌,这个需求其实很直观,我给你拆解一下怎么实现:
首先先明确几个前提(你可以根据实际表结构调整):
- 假设你的表名叫
center_data - 存储中心名称的列叫
center(值为'多伦多'/'蒙特利尔') - 要计算的全职员工数列叫
full_time_count(也就是你说的X列) - 存储日期的列叫
data_date(用来筛选指定月份)
1. 直接计算指定月份的全国总和(两个中心加起来)
如果只需要2018年1月的全国全职员工总数,用这个简单的查询就够了:
SELECT SUM(full_time_count) AS 全国全职员工总数 FROM center_data WHERE -- 筛选2018年1月的所有数据,这个方式能避免时分秒导致的数据遗漏 data_date >= '2018-01-01' AND data_date < '2018-02-01' -- 确保只包含多伦多和蒙特利尔两个中心 AND center IN ('多伦多', '蒙特利尔');
2. 同时查看各中心明细+全国总和
如果想同时看到每个中心的数值,再加上总计行,可以用ROLLUP分组,结果会更清晰:
SELECT -- GROUPING函数用来识别总计行,把总计行的中心名称显示为"全国总和" CASE WHEN GROUPING(center) = 1 THEN '全国总和' ELSE center END AS 中心名称, SUM(full_time_count) AS 全职员工总数 FROM center_data WHERE data_date >= '2018-01-01' AND data_date < '2018-02-01' AND center IN ('多伦多', '蒙特利尔') -- ROLLUP会自动生成总计行 GROUP BY ROLLUP(center);
几个关键注意点:
- 记得把上面的表名、列名替换成你实际使用的名称,别直接复制就跑哦
- 日期筛选用
>= 月初+< 下月初的方式,比BETWEEN更稳妥——如果你的日期列包含时分秒,BETWEEN '2018-01-01' AND '2018-01-31'会漏掉1月31日当天晚于0点的数据 - 如果你的日期列是按年月存储的(比如格式为'2018-01'),那WHERE条件可以直接写成
data_month = '2018-01',操作更简单
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

