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

Oracle查询获取唯一年月:GROUP BY无法生效问题求助

搞定你的GROUP BY问题

看起来你是想从tst_result_main表里提取唯一的年月组合对吧?之前加GROUP BY报错,大概率是因为没遵循GROUP BY的语法规则——咱们一步步来解决:

两种可行的解决方案

方案1:正确使用GROUP BY

大部分数据库要求SELECT里的非聚合字段必须全部放到GROUP BY里,所以你需要把提取出的m和y都加进去,同时保持排序逻辑:

SELECT 
    EXTRACT(month from datetime_insert) m, 
    EXTRACT(year from datetime_insert) y 
FROM tst_result_main 
GROUP BY m, y 
ORDER BY y, m;

要是你的数据库对别名支持不太友好,也可以直接用提取表达式分组:

SELECT 
    EXTRACT(month from datetime_insert) m, 
    EXTRACT(year from datetime_insert) y 
FROM tst_result_main 
GROUP BY EXTRACT(month from datetime_insert), EXTRACT(year from datetime_insert) 
ORDER BY EXTRACT(year from datetime_insert), EXTRACT(month from datetime_insert);

方案2:用DISTINCT更简洁

如果只是要去重得到唯一的年月对,DISTINCT其实更直接,不需要分组:

SELECT DISTINCT
    EXTRACT(month from datetime_insert) m, 
    EXTRACT(year from datetime_insert) y 
FROM tst_result_main 
ORDER BY y, m;

为啥之前的GROUP BY会报错?

不同数据库的GROUP BY规则有差异,像PostgreSQL、SQL Server这类是严格模式:SELECT里出现的非聚合列(也就是这里的m和y)必须全部出现在GROUP BY子句中,不然数据库不知道该返回哪一行的结果。你之前的错误应该就是没把两个字段都加到GROUP BY里导致的。

另外排序的时候直接按y(年份)和m(月份)来,比按原datetime_insert排序更清晰,结果也完全符合你的预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:18