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

PostgreSQL统计YYYYMM格式月份数据出现次数(禁止创建临时表)

提问内容

我有如下所示的数据集:
数据集为YYYYMM格式的年月值,我需要统计每个月份的出现次数,例如202001共出现3次,那么输出对应为1月 3(有对应期望输出结果示例)。
我目前不知道如何实现该期望输出,还请大家提供帮助,需要注意的是所用服务器不允许创建临时表。
非常感谢大家的帮助!


解决方案

你可以直接通过PostgreSQL内置的日期处理函数配合聚合查询实现需求,全程不需要创建临时表,符合服务器限制,具体SQL如下:

SELECT
  (EXTRACT(MONTH FROM TO_DATE(年月字段名::TEXT, 'YYYYMM')))::INT || '月' AS 月份,
  COUNT(*) AS 出现次数
FROM 你的表名
GROUP BY EXTRACT(MONTH FROM TO_DATE(年月字段名::TEXT, 'YYYYMM'))
ORDER BY EXTRACT(MONTH FROM TO_DATE(年月字段名::TEXT, 'YYYYMM')) ASC;

代码说明:

  • 先通过TO_DATE函数将YYYYMM格式的数值/字符串类型的年月值转换为标准日期格式,再用EXTRACT函数提取月份数值,比手动截取字符的兼容性更高,避免格式异常问题
  • 直接对提取出的月份字段做GROUP BY聚合统计总次数,没有涉及临时表创建操作
  • 最后按月份数值升序排序,保证输出结果按1月到12月的正常顺序排列,不会出现字符串排序导致10月排在2月前面的乱序问题

如果你的年月字段是字符串类型,也可以用更轻量化的写法:

SELECT
  RIGHT(年月字段名, 2)::INT || '月' AS 月份,
  COUNT(*) AS 出现次数
FROM 你的表名
GROUP BY RIGHT(年月字段名, 2)::INT
ORDER BY RIGHT(年月字段名, 2)::INT ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:09:02