首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT UDAF(AGGR())中有奇怪的行为

SELECT UDAF(AGGR())中有奇怪的行为
EN

Stack Overflow用户
提问于 2018-08-27 19:32:47
回答 1查看 57关注 0票数 3

有两个select语句:

代码语言:javascript
复制
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上的

  • (在Oracle10g上)给出错误结果(null而不是string 'a')
  • (on Oracle11g)引发ORA-00979: not a GROUP BY expression

我不理解这个错误消息。

你能解释一下这种行为吗?

这是Oracle的bug吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 20:00:30

10g:

似乎我可以使用的WM_CONCAT (是的,没有文档,但在这种情况下无关紧要)或您使用的STRCONCAT (或者其他一些函数)需要更高的级别;请参见此示例:

代码语言:javascript
复制
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 ):

代码语言:javascript
复制
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吗?我不知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52038384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档