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

Oracle按年月分组求和报not group by expression错误求助

错误原因说明

你编写的SQL存在两处核心问题:

  1. 语法顺序错误:Oracle SQL中WHERE子句必须放在GROUP BY子句之前,你写反了子句顺序。
  2. 逻辑与需求不匹配:普通GROUP BY会按分组维度将多行合并为1行,你需要保留所有原始行的场景不适用这种写法;同时普通GROUP BY要求SELECT后的非聚合字段必须全部出现在GROUP BY列表中,你SELECT了Date_a、cl_id两个字段,但GROUP BY里仅声明了年月维度,所以会报not group by expression错误。

正确实现方案

你需要使用Oracle的窗口函数(分析函数)实现分组聚合且不合并原始行的效果,参考写法如下:

SELECT 
    Date_a,
    cl_id,
    SUM(amount) OVER (
        PARTITION BY EXTRACT(YEAR FROM Date_a), EXTRACT(MONTH FROM Date_a), cl_id
    ) AS sum_A
FROM table1
WHERE cl_id = '010';

也可以用TRUNC函数简化年月分组的写法,执行效率更高:

SELECT 
    Date_a,
    cl_id,
    SUM(amount) OVER (PARTITION BY TRUNC(Date_a, 'MM'), cl_id) AS sum_A
FROM table1
WHERE cl_id = '010';

注意:如果你的Date_a字段存储类型为字符串而非DATE类型,需要先转换为DATE类型再处理,写法如下:

SELECT 
    Date_a,
    cl_id,
    SUM(amount) OVER (PARTITION BY TRUNC(TO_DATE(Date_a, 'DD.MM.YYYY'), 'MM'), cl_id) AS sum_A
FROM table1
WHERE cl_id = '010';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:18:01