You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL数据分组:如何将月份转为季度并计算季度平均值

月度数据转季度平均值的SQL实现

核心思路

通过将月份映射为季度标识,再按年份、季度、人员分类分组,计算对应季度的平均值。

通用SQL方案(兼容多数数据库)

方法1:用数学函数快速生成季度

SELECT
    year,
    CONCAT('Q', CEILING(month / 3)) AS quarter,
    no_of_people,
    ROUND(AVG(avg), 2) AS avg
FROM
    your_table_name  -- 替换为你的实际表名
GROUP BY
    year,
    CONCAT('Q', CEILING(month / 3)),
    no_of_people
ORDER BY
    year,
    quarter;

方法2:用CASE WHEN直观映射季度(更易读)

SELECT
    year,
    CASE
        WHEN month BETWEEN 1 AND 3 THEN 'Q1'
        WHEN month BETWEEN 4 AND 6 THEN 'Q2'
        WHEN month BETWEEN 7 AND 9 THEN 'Q3'
        ELSE 'Q4'
    END AS quarter,
    no_of_people,
    ROUND(AVG(avg), 2) AS avg
FROM
    your_table_name  -- 替换为你的实际表名
GROUP BY
    year,
    CASE
        WHEN month BETWEEN 1 AND 3 THEN 'Q1'
        WHEN month BETWEEN 4 AND 6 THEN 'Q2'
        WHEN month BETWEEN 7 AND 9 THEN 'Q3'
        ELSE 'Q4'
    END,
    no_of_people
ORDER BY
    year,
    quarter;

代码说明

  1. 季度转换:
    • 方法1中CEILING(month / 3)将1-3月转为1,4-6月转为2,以此类推,再通过CONCAT拼接成Q1格式的季度标识。
    • 方法2用CASE WHEN直接匹配月份区间,生成对应季度,逻辑更直观。
  2. 平均值计算:AVG(avg)计算分组内所有月度avg字段的平均值,ROUND(..., 2)用于保留2位小数(可根据需求调整)。
  3. 分组规则:按year、quarter、no_of_people分组,确保每个季度的人员分类对应唯一的平均值。

示例结果(基于你的2005年数据)

yearquarterno_of_peopleavg
2005Q1Overall5.23
2005Q2Overall5.37
2005Q3Overall4.30
2005Q4Overall6.13

内容的提问来源于stack exchange,提问作者timothy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:05:48