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

SQL查询为何返回学生-月份单独配对?如何实现按月统计学生总数

问题原因与解决方法

你的SQL问题出在GROUP BY的字段选错了:你现在按完整的registrationdate(包含具体年月日)分组,每个学生的注册日期大概率是不同的具体日期,所以每个分组里只有1条数据,COUNT自然都是1,没法按月聚合。

修正后的SQL写法

写法一:直接按格式化后的月份分组

SELECT To_Char(registrationdate, 'Month') AS "REGDATE", COUNT(*) AS "NUMSTUDENTS"
FROM registration r
INNER JOIN students s
ON r.studentid = s.studentid
GROUP BY To_Char(registrationdate, 'Month')
ORDER BY NUMSTUDENTS;

写法二:用日期截断函数分组(更严谨,避免月份格式的空格问题)

如果是Oracle数据库,推荐用TRUNC函数把日期截断到月份,这样分组更准确,避免To_Char返回的月份字符串带空格导致的分组异常:

SELECT To_Char(TRUNC(registrationdate, 'MONTH'), 'Month') AS "REGDATE", COUNT(*) AS "NUMSTUDENTS"
FROM registration r
INNER JOIN students s
ON r.studentid = s.studentid
GROUP BY TRUNC(registrationdate, 'MONTH')
ORDER BY NUMSTUDENTS;

补充说明

  • 写法一直接按格式化后的月份字符串分组,但要注意不同数据库的日期格式化语法可能有差异(比如MySQL用DATE_FORMAT),核心逻辑一致:GROUP BY的字段必须和SELECT中用于分组的聚合维度一致。
  • 写法二用日期截断函数得到每个日期所属的当月第一天,以此分组后再格式化显示月份,这种方式更稳定,不会因为字符串格式的细微差异导致分组错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:42:28