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

如何按月份(1月、2月、3月等)对日期进行分组?附数据表示例

嗨,这个需求很常见,咱们可以借助SQL的日期处理函数提取月份,再配合分组或排序逻辑来实现。下面针对不同主流数据库,给你具体的实现方案:

一、SQL聚合分组(统计每月汇总数据)

如果需要按月份统计汇总信息(比如每月总销量、总金额、包含的商品),可以用以下方式:

MySQL 实现

SELECT 
    DATE_FORMAT(date, '%c月') AS 月份,
    GROUP_CONCAT(name SEPARATOR ', ') AS 商品列表,
    SUM(quantity) AS 总数量,
    ROUND(SUM(quantity * price), 2) AS 总金额
FROM your_table  -- 替换成你的表名
GROUP BY MONTH(date), DATE_FORMAT(date, '%c月')
ORDER BY MONTH(date);
  • DATE_FORMAT(date, '%c月'):把日期格式化为「1月」「2月」这种中文月份格式
  • GROUP_CONCAT:将同月份的商品名拼接成字符串,方便查看
  • SUM:统计每月的总数量和总金额,ROUND用来保留两位小数
  • GROUP BY同时按月份数值和格式化后的月份分组,确保排序逻辑正确

PostgreSQL 实现

SELECT 
    TO_CHAR(date, 'MM"月"') AS 月份,
    STRING_AGG(name, ', ') AS 商品列表,
    SUM(quantity) AS 总数量,
    ROUND(SUM(quantity * price), 2) AS 总金额
FROM your_table
GROUP BY EXTRACT(MONTH FROM date), TO_CHAR(date, 'MM"月"')
ORDER BY EXTRACT(MONTH FROM date);
  • TO_CHAR(date, 'MM"月"'):实现中文月份格式化
  • STRING_AGG是PostgreSQL自带的字符串聚合函数,功能类似MySQL的GROUP_CONCAT
  • EXTRACT(MONTH FROM date)提取月份数值,用于分组和排序

SQL Server 实现

SELECT 
    FORMAT(date, 'MM月') AS 月份,
    STRING_AGG(name, ', ') AS 商品列表,
    SUM(quantity) AS 总数量,
    ROUND(SUM(quantity * price), 2) AS 总金额
FROM your_table
GROUP BY DATEPART(month, date), FORMAT(date, 'MM月')
ORDER BY DATEPART(month, date);
  • FORMAT(date, 'MM月'):SQL Server 2012+支持的格式化函数,直接生成中文月份
  • STRING_AGG(SQL Server 2017+支持)用于聚合商品名
  • DATEPART(month, date)提取月份数值,保证分组排序的准确性
二、按月份分组展示原始数据

如果只是需要把同月份的原始数据放在一起展示(不做聚合),可以先按月份排序,再在应用层处理分组:

SELECT 
    name,
    date,
    quantity,
    price,
    DATE_FORMAT(date, '%c月') AS 月份  -- 不同数据库替换成对应格式化函数
FROM your_table
ORDER BY MONTH(date);

查询结果会按1月、2月、3月的顺序排列,之后你可以在Python、Java等应用代码里遍历结果,当「月份」字段变化时,插入分组标题即可实现分组展示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:24:48