SQL嵌套聚合函数新增查询列报ORA-00937错误如何解决?
问题解答
错误原因
- 你触发ORA-00937错误的核心原因是嵌套聚合函数(
COUNT(MAX(doc_line_num)))和非聚合列同时出现在SELECT子句中时,分组规则不匹配。 - 第一条SQL可以正常执行,是因为SELECT子句中只有嵌套聚合的计算结果,没有其他非聚合字段,不需要额外分组匹配;第二条SQL加入了
OP_CODE非聚合字段,当前的GROUP BY OP_CODE, DOC_NUM只能支撑单层聚合(比如直接返回MAX(doc_line_num)),无法支撑嵌套聚合的分组逻辑。 - 你当前的WHERE条件已经固定了
OP_CODE = 'CHRISTIANMONTALVO',返回的OP_CODE全为同一个固定值,如果后续需要扩展到查询多个OP_CODE的统计结果,下述方案也可通用。
实现方案
该需求完全可实现,使用子查询分两步聚合即可:
SELECT OP_CODE, COUNT(max_doc_line) AS "TOTAL REC" FROM ( -- 内层先按OP_CODE、DOC_NUM分组,取每个DOC_NUM对应的最大doc_line_num SELECT OP_CODE, DOC_NUM, MAX(doc_line_num) AS max_doc_line FROM C_LAB WHERE COMP_CODE = 'P1' AND OP_CODE = 'CHRISTIANMONTALVO' GROUP BY OP_CODE, DOC_NUM ) t -- 外层按OP_CODE分组,统计总条数 GROUP BY OP_CODE;
如果确定只查询单个OP_CODE的场景,也可以简化为直接把OP_CODE常量写在SELECT中:
SELECT 'CHRISTIANMONTALVO' AS OP_CODE, COUNT(MAX(doc_line_num)) AS "TOTAL REC" FROM C_LAB WHERE COMP_CODE = 'P1' AND OP_CODE = 'CHRISTIANMONTALVO' GROUP BY DOC_NUM;
内容的提问来源于stack exchange,提问作者CHRiSTiANM
相关产品推荐
相关产品推荐

