ORA-00935如何触发?了解Oracle SQL';s嵌套群函数法
我使用的是SQL*Plus或Oracle 11g express,如果相关的话 我遇到了一些奇怪的事情,我想了解更多关于嵌套组函数的信息,因为我是SQL新手,我发现错误的讽刺之处及其解决方案很奇怪: 这不起作用ORA-00935如何触发?了解Oracle SQL';s嵌套群函数法,sql,oracle,oracle11g,sqlplus,Sql,Oracle,Oracle11g,Sqlplus,我使用的是SQL*Plus或Oracle 11g express,如果相关的话 我遇到了一些奇怪的事情,我想了解更多关于嵌套组函数的信息,因为我是SQL新手,我发现错误的讽刺之处及其解决方案很奇怪: 这不起作用 where t1.col1 = (select col1 from t2 having count(col2) = max(count(col2)) group by col1 ; where t1.col1 = (select col1 fro
where
t1.col1 =
(select col1
from t2
having count(col2) = max(count(col2))
group by col1
;
where
t1.col1 =
(select col1
from t2
having count(col2) =
(select max(count(col2)) from t2
group by col1)
group by t2.col1)
;
通过以上内容,我收到:
ORA-00935:组函数嵌套太深
这确实有效
where
t1.col1 =
(select col1
from t2
having count(col2) = max(count(col2))
group by col1
;
where
t1.col1 =
(select col1
from t2
having count(col2) =
(select max(count(col2)) from t2
group by col1)
group by t2.col1)
;
鉴于上述情况,我有两个问题:
1)编译器/应用程序究竟是如何/在何处变得混乱的
2)如果只是为了清楚起见,我是否正确地假设更深的子查询先“激发”,然后为上面的子查询返回一个值,从而完全跳过混乱
having count(col2) = max(count(col2)
HAVING子句在GROUP BY之后生效,因此COUNT(COL2)
是COL2
列中针对col1
的每个不同值的非空值计数。在col1
的一个不同值的上下文中,MAX(COUNT(COL2))
没有任何意义-如果COUNT(COL2)
的结果是3,那么MAX(3)
显然是3-但在这里,编译器足够聪明,知道您可能并不打算这样做
因此,您的意图是,左侧的COUNT(COL2)
应该用于COL1
的不同值,但右侧的COUNT(COL2)
应该覆盖COL1
的所有值。因此,表达式作为一个整体是混合的,不是有效的SQLwhere t1.col1 =
(select col1
from (select col1, count_col2, MAX(count_col2) OVER () max_count_col2
from (select col1,
count(col2) AS count_col2
from t2
GROUP BY col1))
where count_col2 = max_count_col2)
有趣的东西,我看一下,我以前没见过。至于效率,也许;我正在结束一门SQL101课程,并且正在编写一些相当具体的约束条件的代码。不管怎样,谢谢你花时间回答。