有两个select语句:
select max(min(str)) from (select 0 id, 'a' str from dual) group by id having min(str) = 'a';
select strconcat(min(str)) from (select 0 id, 'a' str from dual) group by id having min(str) = 'a';唯一的区别是外层聚合函数:max()与strconcat()。
您可以将strconcat()替换为您已有的任何UDAF。
前一条语句按预期工作:它返回字符串'a'。
后一条语句:
Oracle10g上的
'a')ORA-00979: not a GROUP BY expression 我不理解这个错误消息。
你能解释一下这种行为吗?
这是Oracle的bug吗?
发布于 2018-08-27 20:00:30
10g:
似乎我可以使用的WM_CONCAT (是的,没有文档,但在这种情况下无关紧要)或您使用的STRCONCAT (或者其他一些函数)需要更高的级别;请参见此示例:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
SQL> select max(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';
R
-
a
SQL> -- returns NULL, just as you've said
SQL> select wm_concat(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';
RESULT
---------------------------------------------------------------------
SQL> -- but, if we put it a level "up", the result is OK
SQL> select wm_concat(minstr) result
2 from (select min(str) minstr
3 from (select 0 id, 'a' str from dual)
4 group by id having min(str) = 'a'
5 );
RESULT
---------------------------------------------------------------------
a
SQL>11g:
好的,两个查询(我在这里使用listagg ):
SQL> select max(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';
R
-
a
SQL>
SQL> select listagg(min(str), ',') within group (order by null) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';
RESULT
-----------------------------------------------------------------------
a
SQL>那么,这是一个bug吗?我不知道。
https://stackoverflow.com/questions/52038384
复制相似问题