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

如何在Oracle数据库中实现指定日期范围的GROUP BY分组统计?

Oracle 按月统计项目创建数量(含空月份)查询实现

长期使用MySQL,刚接触Oracle数据库,对两者分组逻辑差异存在困惑。需要编写Oracle查询语句,统计指定日期范围(01-08-2023 00:00:00:000至04-12-2023 00:00:00:000)内每个月的项目创建数量,需包含范围内无项目的月份(显示数量为0)。

现有project表数据

idnamecreated
1Created on September 2nd02-09-2023 00:00:00:000
2Created on September 3rd03-09-2023 00:00:00:000
3Created on October 2nd02-10-2023 00:00:00:000
4Created on October 3rd03-10-2023 00:00:00:000
5Created on October 4th04-10-2023 00:00:00:000
6Created on November 1st01-11-2023 01:00:00:000

期望查询结果

projectsCreateddate
0Aug 2023
2Sep 2023
3Oct 2023
1Nov 2023
0Dec 2023

MySQL实现语句

在MySQL中已实现需求,语句如下:

SELECT 
  Count(DISTINCT p.id) AS projectsCreated, 
  Date_format(p.created, '%b %Y') AS date 
FROM 
  project p
WHERE 
  (
    Unix_timestamp(p.created) >= Unix_timestamp('01-08-2023 00:00:00') 
    AND Unix_timestamp(p.created) <= Unix_timestamp('04-12-2023 00:00:00')
  ) 
GROUP BY 
  date 
ORDER BY 
  p.created ASC;

尝试的Oracle语句(均存在问题)

语句1:结果不符合预期

该语句未按月份分组统计,而是按每个id+月份分组,导致结果行数异常:

SELECT 
  COUNT(p.id) as "COUNT(p.id)",
  TO_CHAR(p.created, 'Mon YYYY') as "createdDate"
FROM 
  project p
WHERE (
    p.created >= to_timestamp('2023-08-01 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
    AND p.created <= to_timestamp('2023-12-04 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
  )
GROUP BY p.id, TO_CHAR(p.created, 'Mon YYYY');

语句2:触发ORA-00979错误

错误原因是SELECT子句中包含未在GROUP BY中声明的列p.created:

SELECT
    Count(DISTINCT(id)) AS "projectsCreated",
    p.created,
    TO_CHAR(created, 'Mon YYYY') as "createdDate"
FROM (
      SELECT 
        p.*,
        TO_CHAR(p.created, 'Mon YYYY') as "createdDate"
      FROM 
        project p
      WHERE 
        (
          p.created >= to_timestamp('2023-08-01 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
          AND p.created <= to_timestamp('2023-12-04 00:00:00', 'YYYY-MM-DD HH24:mi:SS')
        )
)
GROUP BY 
       TO_CHAR(created, 'Mon YYYY')
ORDER BY 
        p.created ASC;

请求帮助

需要编写符合需求的Oracle查询语句:

  1. 按月份分组统计项目创建数量
  2. 包含指定日期范围内的所有月份(无项目的月份显示0)
  3. 避免GROUP BY相关错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:40