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

如何在PostgreSQL中按年月统计记录数?日期格式为yyyy-mm-dd hh-mm-ss

PostgreSQL按年份和月份统计记录数的解决方案

嘿,这个需求很常见!既然你已经搞定了总记录数,那按年月统计的部分其实用PostgreSQL的日期格式化函数就能轻松实现,针对你说的yyyy-mm-dd hh:mm:ss格式的日期字段,我给你两种实用的写法:

基础版:仅统计各年月记录数

假设你的日期字段名叫created_at,数据表是your_table,直接用TO_CHAR函数把日期转换成「YYYY年MM月」的格式,再分组统计就行:

SELECT
  TO_CHAR(created_at, 'YYYY年MM月') AS 统计周期,
  COUNT(*) AS 记录数
FROM your_table
-- 如果日期字段可能存在NULL值,可添加下面这行排除
-- WHERE created_at IS NOT NULL
GROUP BY TO_CHAR(created_at, 'YYYY年MM月')
ORDER BY 统计周期;

进阶版:同时包含总记录数和各年月统计

如果你想把总记录数和各年月的统计结果放在同一张结果表里,用UNION ALL拼接两个查询就行,还能通过排序让总记录数排在最前面:

-- 先查总记录数
SELECT '总记录数' AS 统计周期, COUNT(*) AS 记录数 FROM your_table
UNION ALL
-- 再查各年月的记录数
SELECT
  TO_CHAR(created_at, 'YYYY年MM月') AS 统计周期,
  COUNT(*) AS 记录数
FROM your_table
-- WHERE created_at IS NOT NULL
GROUP BY TO_CHAR(created_at, 'YYYY年MM月')
-- 排序:总记录数排第一,其余按年月顺序
ORDER BY 
  CASE WHEN 统计周期 = '总记录数' THEN 0 ELSE 1 END,
  统计周期;

关键函数说明

  • TO_CHAR(日期字段, '格式模板'):这个函数是PostgreSQL里用来格式化日期/时间的利器,YYYY代表4位年份,MM代表2位月份,搭配中文的「年」「月」就能生成你需要的显示格式。
  • GROUP BY:按照格式化后的年月字符串分组,确保每个年月只统计一次。

这样执行后,就能得到和你示例一样的结果啦:总记录数、2018年1月、2018年2月各自的记录数。

内容的提问来源于stack exchange,提问作者Juan Pablo Vasquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:22:11