ORA-00907缺失右括号:添加WHERE语句后Oracle SQL报错求解
Oracle SQL ORA-00907 错误修复方案
错误根因
- 语法顺序错误:Oracle SQL 要求
WHERE过滤子句必须放在GROUP BY分组子句之前,你当前代码将WHERE写在GROUP BY之后,触发语法解析异常,最终抛出缺失右括号的错误。 - SELECT列表冗余逗号:
to_number(substr(cym, 1, 4)) as cym末尾多写了一个逗号,会进一步干扰SQL解析逻辑。 - 逻辑校验提示:若你的需求是按年份统计去重的fileid数量,
GROUP BY无需携带fileid字段,否则每个分组仅对应一个fileid,count(distinct(fileid))返回值恒为1,失去统计意义;同时分组字段需和SELECT中非聚合字段保持一致,建议按截取后的年份值分组,而非原始cym字段。
修复后代码
select * from( select count(distinct(fileid)) as cyic, to_number(substr(cym, 1, 4)) as cym from group.data where to_number(substr(cym, 1, 4)) >= :start_yr group by to_number(substr(cym, 1, 4)) )
内容的提问来源于stack exchange,提问作者Saara Jackman
相关产品推荐
相关产品推荐

