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

SQL需求:基于DATE与DFF列计算每月平均利率

按月份计算平均利率的SQL实现

需求说明

现有数据表(假设表名为interest_rates)包含两列:

  • DATE:日期类型字段
  • DFF:浮点型的利率数值

需要编写SQL语句,计算每个年份-月份的平均利率。

示例数据

DATEDFF
2003-01-042.0
2003-01-182.25
2003-01-252.5
2003-02-083.0
2003-02-153.25
2003-02-272.75
2004-05-074.0
2004-05-254.0

期望结果

dateavg_dff
2003-012.25
2003-023.0
2004-054.0

不同数据库的SQL实现

由于不同数据库对日期格式化/截断的函数不同,以下是常见数据库的写法:

1. MySQL / MariaDB

用DATE_FORMAT将日期转为YYYY-MM格式,再分组计算平均值:

SELECT
    DATE_FORMAT(DATE, '%Y-%m') AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY DATE_FORMAT(DATE, '%Y-%m')
ORDER BY date;

也可以通过提取年、月分组,效果一致:

SELECT
    CONCAT(YEAR(DATE), '-', LPAD(MONTH(DATE), 2, '0')) AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY YEAR(DATE), MONTH(DATE)
ORDER BY date;

2. PostgreSQL

用DATE_TRUNC截断日期到月份,再转为字符串格式;或者直接用TO_CHAR格式化:

SELECT
    TO_CHAR(DATE_TRUNC('month', DATE), 'YYYY-MM') AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY DATE_TRUNC('month', DATE)
ORDER BY date;

简化版:

SELECT
    TO_CHAR(DATE, 'YYYY-MM') AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY TO_CHAR(DATE, 'YYYY-MM')
ORDER BY date;

3. SQL Server

用FORMAT函数格式化日期,或者组合年、月生成月份标识:

SELECT
    FORMAT(DATE, 'yyyy-MM') AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY FORMAT(DATE, 'yyyy-MM')
ORDER BY date;

如果需要更好的性能,推荐用日期截断后转换:

SELECT
    CONVERT(VARCHAR(7), DATE, 120) AS date,
    AVG(DFF) AS avg_dff
FROM interest_rates
GROUP BY CONVERT(VARCHAR(7), DATE, 120)
ORDER BY date;

说明

  • 如果需要控制平均利率的小数位数,可以用ROUND(AVG(DFF), 2)来保留两位小数(根据需求调整位数)。
  • 分组时要确保是年份+月份的唯一组合,避免不同年份的同月被合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:05:43